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

时间:2016-08-21 09:16:25

标签: 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"
            }
        ]
    }
]

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

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

SELECT * FROM USERS WHERE id IN ('david', 'kevin')

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

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

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

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

我是在做错误的$或查询(我在文档中看到的是'$或'在不同的字段上执行)? 有没有更好的办法完全取消这个? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用查询。在mongo-syntax中:

db.users.find({ "_id" : { $in : [ "david", "kevin" ] } })