MongoDB如果存在,则如何从数组中删除值,否则添加

时间:2018-05-04 07:02:22

标签: mongodb

我有文件

 {
    "_id" : ObjectId("5aebf141a805cd28433c414c"),
    "forumId" : ObjectId("5ae9f82989f7834df037cc90"),
    "userName" : "Name",
    "usersLike" : [ 
        "1","2"
    ],
    "comment" : "Comment",
}

如果值存在,我想从usersLike数组中删除值,或者如果该值不存在则添加。

例如:

如果我尝试将1推入usersLike,它应该返回

{
    "_id" : ObjectId("5aebf141a805cd28433c414c"),
    "forumId" : ObjectId("5ae9f82989f7834df037cc90"),
    "userName" : "Name",
    "usersLike" : [ 
        "2"
    ],
    "comment" : "Comment",
}

我如何查询.. ??

4 个答案:

答案 0 :(得分:0)

db.collectionName.update({_ ID:的ObjectId(" 597afd8200758504d314b534")},{$拉:{' usersLike':" 1"}}, {multi:true})

答案 1 :(得分:0)

Mongodb不支持条件推送或拉取更新。但是你仍然可以使用find来完成它  db.collectionName.find({_id:ObjectId("597afd8200758504d314b534"),usersLike:{$in:["1"]}}).pretty(),如果id存在于usersLike中而不是pull else push。

或者您使用更新查询来提取:db.collectionName.update({_id:ObjectId("597afd8200758504d314b534"), usersLike:{$in:["1"]}},{$pull:{'usersLike':"1"}}, {multi: true})并推送您可以使用:db.collectionName.update({_id:ObjectId("597afd8200758504d314b534"), usersLike:{$nin:["1"]}},{$push:{'usersLike':"1"}}, {multi: true})

答案 2 :(得分:0)

尝试一下

if db.collectionName.find({'_id':ObjectId("5aebf141a805cd28433c414c"),'usersLike:{'$in:['1']}}).count() > 0:

    db.collectionName.update({'_id':ObjectId("5aebf141a805cd28433c414c")},{'$pull':{'usersLike':'1'}})

else:
    db.collectionName.update({'_id':ObjectId("5aebf141a805cd28433c414c")},{'$addToSet':{'usersLike':'1'}})

答案 3 :(得分:0)

MongoDB 4.2+版本引入了pipelined update。这意味着我们现在可以在更新时使用聚合运算符。这给了我们很多力量。

db.collection.updateOne(
    {
        _id: ObjectId("597afd8200758504d314b534")
    },
    [
        {
            $set: {
                usersLike: {
                    $cond: [
                        {
                            $in: ["1", "$usersLike"]
                        },
                        {
                            $setDifference: ["$usersLike", ["1"]]
                        },
                        {
                            $concatArrays: ["$usersLike", ["1"]]
                        }
                    ]
                }
            }
        }
    ]
)