我有文件
{
"_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",
}
我如何查询.. ??
答案 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"]]
}
]
}
}
}
]
)