【问题标题】:Combining $or and $and MongoDB [duplicate]结合 $or 和 $and MongoDB [重复]
【发布时间】:2023-03-22 08:46:01
【问题描述】:

你会如何在 Mongo 中执行以下 sql?

SELECT * FROM messages WHERE (sender='me' AND recipient='them') OR (sender='them' AND recipient='me')

查询伪代码示例:

(sender == me && recipient == them) || (sender == them && recipient <= me)

我正在尝试获取我(“我”)发送给“他们”的所有消息,或者反过来(我从“他们”收到的所有消息)。

我无法让 $or 和 $and 很好地协同工作...

我正在使用 Mongo 3.2.8 和 Mongoose(使用 Node.js)

【问题讨论】:

  • 试试:find({$or : [{ $and : [ {sender : "them" }, { recipient : "me" } ] }, { $and : [ {sender : "me" }, { recipient : "them" } ] }]})

标签: node.js mongodb mongoose database


【解决方案1】:

我试过..在下面创建了一个示例数据集,看起来它可以工作

试试这个

> db.messages.insert({"sender":"me","recipient":"them"})
WriteResult({ "nInserted" : 1 })
> db.messages.insert({"sender":"them","recipient":"me"})
WriteResult({ "nInserted" : 1 })
> db.messages.insert({"sender":"a","recipient":"b"})
WriteResult({ "nInserted" : 1 })
> db.messages.insert({"sender":"me","recipient":"b"})
WriteResult({ "nInserted" : 1 })
> db.messages.insert({"sender":"them","recipient":"b"})
WriteResult({ "nInserted" : 1 })

查看收藏

> db.messages.find();
{ "_id" : ObjectId("57b78b2c8d2d515b0309868e"), "sender" : "me", "recipient" : "them" }
{ "_id" : ObjectId("57b78b3a8d2d515b0309868f"), "sender" : "them", "recipient" : "me" }
{ "_id" : ObjectId("57b78b418d2d515b03098690"), "sender" : "a", "recipient" : "b" }
{ "_id" : ObjectId("57b78b468d2d515b03098691"), "sender" : "me", "recipient" : "b" }
{ "_id" : ObjectId("57b78b4c8d2d515b03098692"), "sender" : "them", "recipient" : "b" }

查询

> db.messages.find({"$or":[{"sender":"me","recipient":"them"},{"sender":"them","recipient":"me"}]});

输出

{ "_id" : ObjectId("57b78b2c8d2d515b0309868e"), "sender" : "me", "recipient" : "them" }
{ "_id" : ObjectId("57b78b3a8d2d515b0309868f"), "sender" : "them", "recipient" : "me" }

>

【讨论】:

  • 这有助于解决您的问题吗?
【解决方案2】:

{$or: [ {sender: "me", recipient:"them"}, {sender: "them", recipient:"me"} ] }

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2016-04-13
    • 1970-01-01
    • 2018-10-24
    • 2017-08-11
    • 2018-06-03
    • 2020-12-17
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多