我在MongoDB中寻找正确的查询来比较关联数组中的两个值,我有这样的文档:
{
"_id" : ObjectId("5502cc4280ee2cd549dee9e8"),
"formats" : [
{
"name" : "first",
"prices" : [
{
"futurePrice" : 5.49,
"price" : 5.49
}
]
},
{
"name" : "second",
"prices" : [
{
"futurePrice" : 5.49,
"price" : 5.49
}
]
}
]
}
我需要比较futurePrice和price字段,以找到至少有一种格式带有futurePrice>的文档。价
我试过这样的事情:
Collection.find({'formats.prices': { $elemMatch: 'this.futurePrice > this.price' }}, ...
但它似乎没有用,任何想法?
答案 0 :(得分:2)
您可以使用$cond
运算符
db.Testing.aggregate([
{
'$unwind': '$formats'
},
{
'$unwind': '$formats.prices'
},
{
'$project':
{
formats :1,
eq : {
$cond: [ { $gt: [ '$formats.prices.futurePrice', '$formats.prices.price' ] }, 1, 0 ]
}
}
},
{
$match: { eq: 1 }
},
{
'$group':
{
'_id' : '$_id',
'formats':
{
'$push': '$formats'
}
}
}
])
修改强>
如评论中提到的@ pepkin88,您可以使用$where
运算符来获得相同的结果。虽然它没有利用索引并可能影响性能。
db.Testing.find(function() {
for (i = 0; i < this.formats.length; i++) {
for (j = 0; j < this.formats[i].prices.length; j++)
return this.formats[i].prices[j].futurePrice > this.formats[i].prices[j].price
}
})