Mongo:$or 查询在同一字段中查找多个可能的值

Ida*_*dan 3 php mongodb

我在 mongo 上有一个名为“reports”的集合,它可以让客户发表评论并进行讨论。

以下是每个报告中“讨论”数组的样子:

"discussions" : [
    {
        "user_id" : "david",
        "timestamp" : ISODate("2016-03-17T01:15:00Z"),
        "comment" : "I was wondering, did anyone else find it interesting?",
        "replies" : [
            {
                "user_id" : "kevin",
                "timestamp" : ISODate("2016-03-17T01:15:00Z"),
                "comment" : "Not really"
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

由于每个评论上方显示的用户信息经常发生变化,我想使用引用并根据“user_id”字段从“users”集合中提取他们的信息,而不是将他们的信息嵌入到每个讨论帖中。我想灵活地分片整个数据库,所以“$lookup”可能是不行的(因为,如果我理解正确,“$lookup”中的“from”字段不能被分片)。

因此,我想构建一个类似于以下 SQL 的“$or”查询:

SELECT * FROM USERS WHERE id IN ('david', 'kevin')
Run Code Online (Sandbox Code Playgroud)

这将从用户集合中提取额外的用户信息,然后将它们与应用程序级别的其余评论详细信息结合起来。

出于这个原因,我推送到 find() 的查询是由应用程序构建的,通过迭代“报告”的结果并提取“user_id”。这是查询的 var_dump 的样子:

array(1) {
  ["$or"]=>
  array(1) {
    [0]=>
    array(1) {
      ["_id"]=>
      string(4) "david"
    },
    [1]=>
    array(1) {
        ["_id"]=>
        string(4) "kevin"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不起作用,因为尽管数据库中有这些用户,但我没有得到任何结果。注意:“users”集合中用户的_id为用户名。

我是否错误地执行了 $or 查询(我在文档中看到的所有内容都是在不同字段上执行的 '$or' )?有没有更好的方法来完全解决这个问题?提前致谢!

mtj*_*mtj 5

您应该为此使用查询。在 mongo 语法中:

db.users.find({ "_id" : { $in : [ "david", "kevin" ] } })
Run Code Online (Sandbox Code Playgroud)

  • @Normal不,这意味着“_id”是一个按顺序恰好包含值“david”和“kevin”的数组。请参阅https://www.mongodb.com/docs/manual/tutorial/query-arrays/ (2认同)