gpt4 book ai didi

mongodb - 如何在 mongoDB 中切换数组中的元素

转载 作者:行者123 更新时间:2023-12-03 17:08:33 25 4
gpt4 key购买 nike

我在 mongoDB 中有一个字符串数组( ObjectIds )。
我想切换该数组中的一个元素:如果该元素存在于数组中,则将其删除,否则推送该元素。

例子:

arr = ["5b608c0769698c3990c64ef3","5b608c0769698c3990c64ef4"]
element = ["5b608c0769698c3990c64ef3"]

最终数组:
arr = ["5b608c0769698c3990c64ef4"]

我的用例:

我正在创建一个博客网站,并在博客架构中存储每个喜欢该博客的用户的 ID,以便在向用户显示博客时突出显示喜欢按钮。

最佳答案

如果您要更新文档,则可以在更新中使用管道。但是此功能在 MongoDB 4.2 或更高版本中可用。

db.collection.update(
{ },
[
{
$set: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
]
)
注意:假设变量 element是一个字符串值。
如果您只是查询,则可以使用以下聚合:
db.collection.aggregate([
{
$addFields: {
arr: {
$cond: [ { $in: [ element, "$arr" ] },
{ $setDifference: [ "$arr", [ element ] ] },
{ $concatArrays: [ "$arr", [ element ] ] }
]
}
}
}
] )
但是,如果您使用的是 4.2 之前的 MongoDB 版本,那么您可以使用上面的聚合输出来更新文档:
db.collection.aggregate( [
// aggregation pipeine from above ...
] ).forEach( doc => db.collection.updateOne( { _id: doc._id }, { $set: { arr: doc.arr } } ) )

关于mongodb - 如何在 mongoDB 中切换数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51618537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com