将表达/条件存储在文档中

时间:2019-11-14 15:57:29

标签: mongodb

我是mongodb的新手,无法确定以下情况是否可能。

我可以在文件的字段中存储gt,lt等条件,然后在查询中使用它吗?

因此,考虑到以下文件:

{
    title : "testTitle1",
    score : 55,
    condition : "gt"
}

{
    title : "testTitle2",
    score : 30,
    condition : "lt"
}

给定inputScore = 75,将仅返回testTitle1文档,因为75大于(“ gt”)55。不会返回第二个文档,因为它不少于(“ lt”)30。

有什么想法吗?

谢谢

3 个答案:

答案 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是否具有gtlt的值,并在{{1 }}与true进行比较。该比较结果false给出了包含或拒绝输入文档的过滤条件。

inputScore