mongodb查找计算字段



我正在尝试使用过滤器中的过滤值创建一个mongodb查询。例如:

var myIdVariable = '1jig23h34r34r30h';
var myVisibleVariable = false;
var myDistanceVariable = 100;
db.getCollection.find({
'_id': myIdVariable,
'isVisible': myVisibleVariable,
'distanceRange': {$lte: {myDistanceVariable - distanceRange}}
})

因此,我想根据(myDistanceVariable-distanceRange(的计算从数据库中过滤distanceRange,并在同一查询中给定distanceRange。我不知道我是否能给你一个清楚的解释我的问题。有可能吗?

谢谢你。

使用$expr运算符构建查询表达式,该表达式允许您比较同一文档中的字段,以及将distanceRange字段与字段本身和变量的计算进行比较。

您需要使用逻辑$and查询运算符来包括其他查询表达式,因此您的最终查询将如下所示:

db.getCollection('collectionName').find({
'$expr': {
'$and': [
{ 'isVisible': myVisibleVariable },
{ '$lte': [
'$distanceRange', {
'$subtract': [
myDistanceVariable, '$distanceRange'
]
}
] }
]
}
})

如果您的MongoDB服务器不支持$expr运算符,则使用$redact选择聚合框架路由

db.getCollection('collectionName').aggregate([
{ "$redact": {
"$cond": [
{   
'$and': [
{ 'isVisible': myVisibleVariable },
{ '$lte': [
'$distanceRange', {
'$subtract': [
x, '$distanceRange'
]
}
] }
]
},
"$$KEEP",
"$$PRUNE"
]
} }
])

注意

在查询表达式中包含_id意味着您将选择范围缩小到仅一个文档,并且查询可能不会返回任何结果,因为它正在寻找具有该_id的特定文档,并且同一文档应该满足其他查询表达式。

最新更新