更新 mongodb 中的嵌套文档

Posted

技术标签:

【中文标题】更新 mongodb 中的嵌套文档【英文标题】:Updating nested documents in mongodb 【发布时间】:2010-11-11 20:53:03 【问题描述】:

假设我有一个类似这样的数据结构:


    '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']
]

当然,不是我想要的。

【问题讨论】:

【参考方案1】:

以下内容适用于 mongo shell - 所以我不确定上面发生了什么。试试这个,看看它是否有效?如果是这样,我会说获取最新的 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)。

【讨论】:

嗯,说实话,我是在 python 中做这个测试,而不是在解释器中。如果它与解释器一起工作,问题一定在于我在 python 中的实现。如果我仍然无法正常工作,我会来 MongoDB 论坛。 如果anotherdoc.something 是数组类型,我将如何将另一个元素推送到该类型?【参考方案2】:

你最好在 mongodb 用户的 googlegroup 中问这个问题。 你的问题的答案在这里http://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca?hl=en

【讨论】:

以上是关于更新 mongodb 中的嵌套文档的主要内容,如果未能解决你的问题,请参考以下文章

更新嵌套的 MongoDB 文档对象

Mongodb嵌套文档更新?

Mongodb嵌套文档的修改-利用数组修改器更新数据

MongoDB - 仅当嵌套数组中的所有条目存在时才更新它们

mongodb查询更新选择嵌套字段

更新嵌套的 MongoDB 集合 (Pymongo)