gpt4 book ai didi

MongoDB:如何在检查是否大于零后更新嵌套数组值?

转载 作者:可可西里 更新时间:2023-11-01 10:47:56 27 4
gpt4 key购买 nike

我可以减少嵌套数组中的值,但我想检查该值是否大于零(因此永远不要变为负数)。例如,我有这个:

{
"_id" : ObjectId("5a3b0bd69c0000c2a1d839af"),
"slots" : [
{
"id" : "V2qlAEk7Wp0tWwlyWSfX7KRZ",
"number" : 5.0
},
.......
.......
{
"id" : "VfB4f8G1KcgRA8qx0aby5nI0",
"number" : 0.0
}]
}
{
"_id" : ObjectId("5a3b0bd69c0000c2a1d839ag"),
"slots" : [
{
"id" : "V2qlAEEESbrEB4bwberbResbd",
"number" : 10.0
},
.......
.......
{
"id" : "DFwseEb5enRbfsbre54rtFfds",
"number" : 1.0
}]
}

如果我想减少 number第一个文档的值 [id=5a3b0bd69c0000c2a1d839af]slots.id = V2qlAEk7Wp0tWwlyWSfX7KRZ ,我使用:

db.getCollection('schedulers').update(
{
"_id" : ObjectId("5a3b0bd69c0000c2a1d839af"),
"slots.id" :"V2qlAEk7Wp0tWwlyWSfX7KRZ"
},
{
"$inc":{"slots.$.number":-1}
})

但我不知道如何检查 number在减小值之前大于 0。我尝试使用过滤后的位置运算符 $[<identifier>] ,但我有一个错误:

db.getCollection('schedulers').update(
{
"_id" : ObjectId("5a3b0bd69c0000c2a1d839af"),
"slots.id" :"V2qlAEk7Wp0tWwlyWSfX7KRZ"
},
{
"$inc":{"slots.$[elm].number":-1}
},
{
arrayFilters: [ { "elm.number": {"$gt" : 0}} ]
})

错误是:

不能使用部分(slots of slots.$[elm].number)来遍历元素....

此外,在查询的第一部分应用条件并不能解决问题,因为 mongo 遍历了所有数组,如果 number 也是如此。为零,它只是移动到数组中的另一个元素,直到它找到数字 > 0,当它找到它时,它开始减少 number另一个元素的值完全忽略了两个 id 条件 [因为现在 $然后指向数组的另一个元素]:

db.getCollection('schedulers').update(
{
"_id" : ObjectId("5a3b0bd69c0000c2a1d839af"),
"slots.id" :"V2qlAEk7Wp0tWwlyWSfX7KRZ",
"slots.number":{"$gt" : 0}
},
{
"$inc":{"slots.$.number":-1}
})

我认为获得我想要的东西的正确方法是使用 arrayFilters但我不明白问题出在哪里。

最佳答案

固定使用:

db.getCollection('schedulers').update(
{
"_id" : ObjectId("5a3b0bd69c0000c2a1d839af"),
"slots" :
{
"$elemMatch":
{
"id":"V2qlAEk7Wp0tWwlyWSfX7KRZ",
"number":
{
"$gt" : 0
}
}
}
},
{
"$inc":
{
"slots.$.number":-1
}
})

谢谢

关于MongoDB:如何在检查是否大于零后更新嵌套数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917350/

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