我是mongodb的新手,无法确定以下情况是否可能。
我可以在文件的字段中存储gt,lt等条件,然后在查询中使用它吗?
因此,考虑到以下文件:
{
title : "testTitle1",
score : 55,
condition : "gt"
}
{
title : "testTitle2",
score : 30,
condition : "lt"
}
给定inputScore = 75,将仅返回testTitle1文档,因为75大于(“ gt”)55。不会返回第二个文档,因为它不少于(“ lt”)30。>
有什么想法吗?
谢谢
答案 0 :(得分:0)
是的,您可以将传递给查询的参数仅仅是一个对象。除非您要在发送查询之前添加其他处理,否则将需要使用mongodb operators。
例如:
const data = {
title : "testTitle1",
score : 55,
condition : "$gt"
};
const query = {
score: {}
};
query.score[data.condition] = data.score;
console.log(query);
具有其他运算符转换的示例:
const data = {
title : "testTitle1",
score : 55,
condition : "gt"
};
const query = {
score: {}
};
switch (data.condition) {
case "gt":
query.score["$gt"] = data.score;
break;
case "lt":
query.score["$lt"] = data.score;
break;
}
console.log(query);
答案 1 :(得分:0)
如果您要使用纯mongodb查询,则可以在查询或聚合中使用$expr运算符。
db.collection.find({
$expr: {
$or: [
{
$and: [
{$eq: ['$condition', 'gt']},
{$gt: [75, '$score']}
]
},
{
$and: [
{$eq: ['$condition', 'lt']},
{$lt: [75, '$score']}
]
}
]
}
})
我希望你明白
答案 2 :(得分:0)
查询使用aggregation framework。我使用$switch
检查condition
是否具有gt
或lt
的值,并在{{1 }}与true
进行比较。该比较结果false
给出了包含或拒绝输入文档的过滤条件。
inputScore