繁体   English   中英

如何在MongoDB中一起进行“ $ and”和“ $ or”查询?

[英]How to make a “$and” and “$or” query together in MongoDB?

我有MongoDB Collection,我的要求如下

这有效:(仅以frequency:1条记录返回)

http://localhost:3000/words?frequency=1

这有效:(仅以difficulty:2返回difficulty:2条记录)

http://localhost:3000/words?difficulty=2

这有效,但不是我想要的

http://localhost:3000/words?frequency=1&difficulty=2

该查询不返回frequency=1 difficulty=2值。 但我想只得到具有frequency=1difficulty=2的值。

该查询应仅返回"word":"first" ,但返回"word":"first""word":"fourth"

示例MongoDB集合:

{
    "word": "first",
    "frequency": 1,
    "difficulty": 2
},
{
    "word": "second",
    "frequency": 1,
    "difficulty": 1
},
{
    "word": "third",
    "frequency": 2,
    "difficulty": 1
},
{
    "word": "fourth",
    "frequency": 2,
    "difficulty": 2
},

这是我的查询:

const difficulty = req.query.difficulty;
const frequency = req.query.frequency;
Words.find( { $or: [ { difficulty: difficulty }, { frequency: frequency }, { $and: [ { difficulty: difficulty }, { frequency: frequency } ] } ] } )

自昨天以来,我一直在尝试解决此问题,但我无法解决,感谢您的帮助(对不起我的英语)

解决:根据条件解决

我只想同时获得频率= 1,难度= 2的值

您的查询无法按预期工作,因为您在$ or和$ and条件中给出了所有选项。 因此,即使您在API调用中发送了不同的参数,它也会进行如下检查:例如:

对于: http:// localhost:3000 / words?frequency = 1&difficulty = 2

您的查询将是:

Words.find( { $or: [ { difficulty: 2 }, { frequency: 1 }, { $and: [ { difficulty: 2 }, { frequency: 1 } ] } ] } )

正在搜索-{难度:2}-或{频率:1}-或{难度:2}和{频率:1}

这就是为什么您得到混合结果。

这是您可以做的...

检查控制器中的查询参数,并根据该参数将不同的查询发送到数据库并获取准确的数据。

例如

对于: http:// localhost:3000 / words?frequency = 1&difficulty = 2

尝试这个:

db.collection.find({
  $and: [
    {
      frequency: 1
    },
    {
      difficulty: 2
    }
  ]
});

而对于

http:// localhost:3000 / words?frequency = 1

http:// localhost:3000 / words?difficulty = 2

db.collection.find( { $or: [ { difficulty: difficulty }, { frequency: frequency } ] } )

这是一个示例: https : //mongoplayground.net/p/DmdxOx6wc8K

您在单个$ or运算符中混合查询。

要返回频率= 1,难度= 2的记录,则必须使用$ and运算符。

并且根据MongoDB文档,当指定逗号分隔的表达式列表时,它提供了隐式AND操作。 因此,您可以直接使用:

Words.find({
   frequency: 1,
   difficulty: 2
});

但是对于具有多个表达式且指定同一个运算符的AND查询 ,请参阅MongoDB文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM