Mongoose,Node JS,MongoDB和/或查询不起作用

时间:2019-04-03 03:01:43

标签: node.js mongodb mongoose

我正在运行MongoDB v3.6.8,Node v8.12.0和Mongoose v5.4.4。

此纯或查询会产生结果:

db.messages.find( { $or : [ { senderId : "5c97ca3eed0cc17e8cfb0486" }, { receiverId : "5c8430effe7df210ee3264bf" } ] })

此AND OR查询不返回任何结果:

db.messages.find( { $and : [ { $or : [ { senderId : "5c8430effe7df210ee3264bf" }, { receiverId : "5c97ca3eed0cc17e8cfb0486" } ] }, { $or : [ { senderId : "5c97ca3eed0cc17e8cfb0486" }, { receiverId : "5c8430effe7df210ee3264bf" } ] } ] } )

尽管这是一个AND OR查询,但由于一个OR查询执行了,因此是否应返回结果。我在这里想念什么吗?我的AND OR查询是否存在错误?我直接从这里的Mongo文档中获取:https://docs.mongodb.com/manual/reference/operator/query/and/

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

要使查询中的AND运算符为true,两个OR表达式都必须为true。 第一个表达式可能返回false。

答案 1 :(得分:0)

对于以后遇到相同问题的任何人,我都将$和&$ or混合在一起,这样正确的查询将是:

db.messages.find( { $or : [ { $and : [ { senderId : "5c8430effe7df210ee3264bf" }, { receiverId : "5c97ca3eed0cc17e8cfb0486" } ] }, { $and : [ { senderId : "5c97ca3eed0cc17e8cfb0486" }, { receiverId : "5c8430effe7df210ee3264bf" } ] } ] } )