这是我的 mongo 样本集合,
{
"_id" : ObjectId("62aeb8301ed12a14a8873df1"),
"Fields" : [
{
"FieldId" : "name",
"Value" : [ "test_123" ]
},
{
"FieldId" : "mobile",
"Value" : [ "123" ]
},
{
"FieldId" : "amount",
"Value" : [ "300" ]
},
{
"FieldId" : "discount",
"Value" : null
}
]
}
在这里我想获取匹配的记录,例如“Fields.FieldId”应该等于“amount”和“Fields.Value.0”应该大于0或其他给定的值。
请记下以下几点,
我已经尝试过如下所示,但不起作用,
db.form.aggregate([
{
$match:
{
{
$expr: {
$ne: [
{ $filter: {
input: '$Fields',
cond: { if: {$eq:["$$this.FieldId", "amount"]},
then:{$gte: [{$toDouble: "$$this.Value.0"}, 0]} }
}
}, []
]
}
}
}
}])
我不想使用 $project 或 $addFields。我只想直接进行 $match 查询。如果可以的话请推荐我。
提前致谢, 玛尼
使用
$and
运算符来匹配多个条件,而不是 if
和 then
。
使用
$first
运算符获取数组中的第一个元素。
此外,在
{}
阶段还有额外的大括号 $match
会破坏查询。取下额外的支架 {}
。
db.collection.aggregate([
{
$match: {
$expr: {
$ne: [
{
$filter: {
input: "$Fields",
cond: {
$and: [
{
$eq: [
"$$this.FieldId",
"amount"
]
},
{
$gte: [
{
$toDouble: {
$first: "$$this.Value"
}
},
0
]
}
]
}
}
},
[]
]
}
}
}
])