MongoDB如何从数组中移除值(如果存在),否则添加
我有文件MongoDB如何从数组中移除值(如果存在),否则添加,mongodb,Mongodb,我有文件 { "_id" : ObjectId("5aebf141a805cd28433c414c"), "forumId" : ObjectId("5ae9f82989f7834df037cc90"), "userName" : "Name", "usersLike" : [ "1","2" ], "comment" : "Comment", } 如果值存在,我想从usersLike数组中删除值,如果值不存在,则添加值 例如
{
"_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",
}
我如何查询它?。试试这个:
db.collectionName.update({_id:ObjectId("597afd8200758504d314b534")},{$pull:{'usersLike':"1"}}, {multi: true})
Mongodb不支持条件推送或拉送更新。但是,您仍然可以使用“查找”:
db.collectionName.find({_id:ObjectId("597afd8200758504d314b534"),usersLike:{$in:["1"]}}).pretty()
如果id
存在于usersLike
中,则拉动else按钮
或者,您可以使用更新查询作为:
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})
试试这个
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'}})
MongoDB版本4.2+引入了。这意味着我们现在可以在更新时使用聚合运算符。这给了我们很大的力量
db.collection.updateOne(
{
_id: ObjectId("597afd8200758504d314b534")
},
[
{
$set: {
usersLike: {
$cond: [
{
$in: ["1", "$usersLike"]
},
{
$setDifference: ["$usersLike", ["1"]]
},
{
$concatArrays: ["$usersLike", ["1"]]
}
]
}
}
}
]
)
值是否存在于中?数组
usersLike
存在,或者在usersLike
中应该存在一个特定的值?请给出一个更具体的例子?如果数组usersLike中存在值1,则应该删除它。否则,应该将值1添加到数组usersLike中。我认为更重要的是,为什么您不知道它的存在?例如,如果你试图在facebook上建立类似“ThisSite”或“likes”的网站,那么页面中的数据实际上知道当前用户已经拥有投票权。因此,如果我“向上投票”这个问题,然后稍后再回到这个页面,页面数据的一部分包括“我的投票”的记录,所以在我再次发送投票请求之前,我可以告诉你我已经投票了,因此没有必要发送请求。我想你只是在这些情况下试图“盲切换”这些值,但这并不是正确的方法。如上所述,您的“客户”应该已经知道用户是否投票/喜欢。有关更多详细信息,请参阅。无法使用此查询完成。。。此查询将只提取($pull
)id,不能添加($push
),正如问题所述,$push
和$pull
应该同时完成……Mongodb不支持有条件的推送或推送更新。但是,您仍然可以使用find(db.collectionName.find({u id:ObjectId(“597afd8200758504d314b534”)、usersLike:{$in:[“1”]}}}).pretty())来完成此操作,如果id存在于usersLike中,而不是pull-else-push.yes,则可以完成此操作。。。但他希望在一个查询中得到它,这是不可能的