我正在尝试使用过滤器中的过滤后的值创建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。 我不知道我是否能给您清楚说明我的问题。有可能吗?
谢谢。
答案 0 :(得分:1)
使用 $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
的特定文档,并且同一文档应满足其他查询表达式。