gpt4 book ai didi

Mongodb - 如果有条件则聚合$push

转载 作者:行者123 更新时间:2023-12-01 21:15:56 24 4
gpt4 key购买 nike

我正在尝试聚合一批文档。我想要 $push 的文档中有两个字段。但是,假设它们是“_id”和“A”字段,如果“A”是 $gt 0,我只需要 $push“_id”和“A”。

我尝试了两种方法。

第一个。

db.collection.aggregate([{
"$group":{
"field": {
"$push": {
"$cond":[
{"$gt":["$A", 0]},
{"id": "$_id", "A":"$A"},
null
]
}
},
"secondField":{"$push":"$B"}
}])

但这会将空值推送到“field”,而我不想要它。

第二个。

db.collection.aggregate([{
"$group":
"field": {
"$cond":[
{"$gt",["$A", 0]},
{"$push": {"id":"$_id", "A":"$A"}},
null
]
},
"secondField":{"$push":"$B"}
}])

第二个根本不起作用......

在其他情况下有没有办法跳过 $push?

添加:

预期文件:

{
"_id":objectid(1),
"A":2,
"B":"One"
},
{
"_id":objectid(2),
"A":3,
"B":"Two"
},
{
"_id":objectid(3),
"B":"Three"
}

预期输出:

{
"field":[
{
"A":"2",
"_id":objectid(1)
},
{
"A":"3",
"_id":objectid(2)
},
],
"secondField":["One", "Two", "Three"]
}

最佳答案

您可以使用“$$REMOVE”:

  • 此系统变量是在版本 3.6 中添加的 ( mongodb docs )
db.collection.aggregate([{
$group:{
field: {
$push: {
$cond:[
{ $gt: ["$A", 0] },
{ id: "$_id", A:"$A" },
"$$REMOVE"
]
}
},
secondField:{ $push: "$B" }
}
])

这样您就不必过滤空值。

关于Mongodb - 如果有条件则聚合$push,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687020/

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