我的对象如下所示
{
id: 1,
a: "val7f",
b: "online",
c: "reg",
d: "retd"
},
{
id: 2,
a: "val6f",
b: "online",
c: "reg",
d: "new"
},
{
id: 3,
a: "val6f",
b: "offline",
c: "non-reg",
d: "new"
}
我想以下列方式构建查询。
if (a=="val7f" && b=="offline" && c="reg") has objs > 1 return result Objs
else if(a=="val7f" && b=="offline" && c="reg") has objs > 1 return result objs
etc.
我构建了以下查询,但显示的值来自else
查询,即使if结果有结果:
db.Collection.aggregate([
{ $redact: {
$cond: {
if: {
$and: [
{ $eq: [ "a", "val7f" ] },
{ $eq: [ "b", "offline" ] },
{ $eq: [ "c", "reg" ] }
]
},
then: "$$DESCEND",
else: {
$cond: {
if: {
$and: [
{ $eq: [ "$a", "val6f"] },
{ $eq: [ "b", "offline"] },
{ $eq: [ "c", "reg"] }
]
},
else: "$$PRUNE"
}
}
}
} }
]);
总结如下
我已将条件设置如下
if: {
$and: [
{ $eq: [ "a", "val7f" ] },
{ $eq: [ "b", "offline" ] },
{ $eq: [ "c", "reg" ] }
]
}
如果有结果说
{
id: 6,
a: "val7f",
b: "online",
c: "reg",
d: "retd"
}
它应该返回上面的文件。 如果没有文件匹配标准
其他情况应该执行
if: {
$and: [
{ $eq: [ "$a", "val6f"] },
{ $eq: [ "b", "offline"] },
{ $eq: [ "c", "reg"] }
]
}
如果有匹配的说法
{
id: 11,
a: "val6f",
b: "offline",
c: "reg",
d: "new"
}
就我而言,对于上面构建的查询,我将两个文档都放在输出shell中。