【问题标题】:$pull operator in MongoDBMongoDB 中的 $pull 运算符
【发布时间】:2019-03-04 09:52:59
【问题描述】:
{
    "_id" : ObjectId("5badfada90fd543fd8aa7f96"),
    "__v" : 0,
    "deleted" : false,
    "groups" : [ 
        {
            "group" : "grp",
            "_id" : ObjectId("5bae09a601123357e58b66a2"),
            "activities" : [ 
                ObjectId("5bae09a601123357e58b66a3"), 
                ObjectId("5bae10de01123357e58b66a6")
            ]
        }, 
        {
            "group" : "123",
            "_id" : ObjectId("5bae0f1001123357e58b66a4"),
            "activities" : [ 
                ObjectId("5bae0f1001123357e58b66a5")
            ]
        }
    ],
    "nextActivityId" : 22,
    "name" : "test",
    "year" : "1",
    "status" : "2",
    "vision" : ObjectId("5bab2f4872acf42a81c124d0")
}

以上架构是一个“计划”架构 我必须编写一个查询来删除“活动”数组中的活动。对此的最佳解决方案是什么?以及我将如何使用 $pull 来实现这一点 这是我的解决方案,但它会删除完整的组数组

Plan.update({ _id: PLAN ID }, { $pull: { groups: { activities: ACTIVITY ID } } })

计划 ID 为:“_id”:ObjectId("5badfada90fd543fd8aa7f96"), 活动 ID 例如:ObjectId("5bae09a601123357e58b66a3")

谢谢!

【问题讨论】:

标签: mongodb pull


【解决方案1】:

您需要使用位置 $ 更新运算符。

db.Plan.update(
    { "_id" : PLAN ID }, 
    { "$pull": { "groups.$.activities": ACTIVITY ID } } 
)

【讨论】:

  • @AkhileshOjha:如果这个答案实现了你的目标,请接受它
【解决方案2】:

你可以试试这个,

    db.Plan.update({ _id: ObjectId("5badfada90fd543fd8aa7f96"),"groups.activities":{$in:[ ObjectId("5bae09a601123357e58b66a3") ]}},
{ $pull: { "groups.$.activities": ObjectId("5bae09a601123357e58b66a3") }  });

仅使用$ 更新对象时,位置运算符未从查询警告中找到所需的匹配项。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2013-05-03
    相关资源
    最近更新 更多