【问题标题】:$addToSet nested nested object using pymongo使用 pymongo 的 $addToSet 嵌套嵌套对象
【发布时间】:2012-09-21 10:40:02
【问题描述】:

作为使用 pymongo 在 python 中的 for-in 循环的一部分,我想在 linktype 字段中添加一些嵌套文档/对象,该字段将位于 links 字段中: 在要添加第一个此类条目之前,links 字段或 linktype 字段都不存在。

执行此操作的命令是什么?

这是添加链接之前的一个项目:

item = {
    "_id" : ObjectId("5067c26b9d595266e25e825a"),
    "name": "a Name"
}

添加一个typeA类型的链接后:

toType = "typeA"
to_link = {"_id" : ObjectId("5067c26b9d595266e25e825b"), "property":"value"}

{
    "_id" : ObjectId("5067c26b9d595266e25e825a"),
    "name": "a Name",
    "links" : {
        "typeA":{
            {"_id" : ObjectId("5067c26b9d595266e25e825b"), "property":"value"}       
        }
    }
}

我试过了:

db.collection.update({"name":"a Name"},{{"links":{"$addToSet":{toType:to_link}}})

这不起作用。 如果我只是使用:

db.collection.update({"name":"a Name"},{ {"$addToSet":{toType:to_link}} )

这行得通,但这不是我想要的。

【问题讨论】:

    标签: python mongodb pymongo database


    【解决方案1】:

    $addToSet 用于添加到数组中。要将新属性添加到现有嵌入对象,您需要使用 $set 运算符和 dot notation 作为:

    db.collection.update({name: 'a name'}, {$set: {'links.' + toType: to_link}})
    

    【讨论】:

    • 我刚刚意识到我实际上希望typeA 是一个对象数组。所以使用你的答案我意识到我正在寻找:from_collection.update({"ID":fromID},{"$addToSet":{'links.'+toType: to_link}})。虽然你已经回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多