是否可以获取包含column1>的记录? (第2栏* 5)? 我试过了,但没有回复:
db.getCollection('rss').find({'duplicates': {$gt: 'total_count' * 5}})
答案 0 :(得分:2)
您可以使用 $where
运算符来传入JavaScript表达式:
db.getCollection('rss').find({ "$where": "this.duplicates > (this.total_count * 5)" })
// sama as db.getCollection('rss').find("this.duplicates > (this.total_count * 5)")
或将聚合框架与 $cmp
运算符一起使用,这比上面的效果更有效,因为单独使用 $where
将需要Mongo进行集合扫描,其中每个文档必须从BSON转换为JavaScript对象,然后运行 $where
表达式。索引也不能用于满足 $where
表达式,因此性能大大降低,查询速度也慢得多。
使用 $cmp
运算符可以提供更好的性能,因为它会比较两个值并返回
所以你的最终查询看起来像是:
db.getCollection('rss').aggregate([
{
"$project": {
// Project other fields as required
"duplicates": 1,
"total_count": 1,
"isGreater": {
"$cmp": [
"$duplicates",
{ "$multiply": [ "$total_count", 5 ] }
]
}
}
},
{ "$match": { "isGreater": 1 } }
])