我正在运行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/
任何帮助将不胜感激!
答案 0 :(得分:1)
要使查询中的AND运算符为true,两个OR表达式都必须为true。 第一个表达式可能返回false。
答案 1 :(得分:0)
对于以后遇到相同问题的任何人,我都将$和&$ or混合在一起,这样正确的查询将是:
db.messages.find( { $or : [ { $and : [ { senderId : "5c8430effe7df210ee3264bf" }, { receiverId : "5c97ca3eed0cc17e8cfb0486" } ] }, { $and : [ { senderId : "5c97ca3eed0cc17e8cfb0486" }, { receiverId : "5c8430effe7df210ee3264bf" } ] } ] } )