سؤال

قل لدي هيكل بيانات شيء مثل هذا:

{
    'name': 'test',
    'anotherdoc': {
        'something': 'someval',
        'somenum': 1
    }
}

الآن، أقول أنني أردت ضبط شيء ما. في البداية، أنا رغم أنه سيتم القيام به مثل ذلك:

collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'});

ومع ذلك، يبدو أن هذا غير صحيح. إنه يضع بعض البيانات هناك، لكنه يفعل ذلك بطريقة غريبة. ذلك، في هذه الحالة، ينتهي الأمر مثل ذلك:

[
    {
        'name': 'test',
        'anotherdoc': {
            'something': 'someval',
            'somenum': 1
        }
    },
    ['anotherdoc.something', 'someval']
]

بالطبع، ليس ما كنت أبحث عنه.

هل كانت مفيدة؟

المحلول

ما يلي يعمل من أجلي من شل منغو - لذلك أنا لست متأكدا مما حدث أعلاه لك. جرب هذا ونرى ما اذا كان يعمل؟ إذا كان الأمر كذلك، أود أن أقول الاستيلاء على أحدث رمز Mongo في حالة وجود مشكلة في أن تكون مشكلة.

x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } }
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection = db.foo;
test.foo
> collection.insert(x)
> collection.find()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x._id
> x = collection.findOne()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}} )
> collection.find()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}}
> 

كما ذكر أعلاه، فإن منتديات Mongodb ربما تعتبر أسرع (أو جرب IRC).

نصائح أخرى

من الأفضل أن تسأل هذا في GoogleGroup مستخدم MongoDB. الجواب لسؤالك هو هنا http://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca؟hl=en

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top