php - 蒙戈 : $or query looking for multiple possible values in the same field

标签 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”字段从“users”集合中提取他们的信息,而不是将他们的信息嵌入到每个讨论帖中。
我想灵活地分片整个数据库,所以“$lookup”可能是不行的(因为,如果我理解正确,“$lookup”中的“from”字段不能被分片)。

因此,我想构建一个类似于以下 SQL 的“$or”查询:
SELECT * FROM USERS WHERE id IN ('david', 'kevin')

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

出于这个原因,我推送到 find() 的查询是由应用程序构建的,通过迭代“报告”的结果并提取“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为用户名。

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

最佳答案

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

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

关于php - 蒙戈 : $or query looking for multiple possible values in the same field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062662/

相关文章:

php - Typo3 TCA 类型 "text"行/文本中断?

php - cron file_get_contents() 错误

PHP 5.5.6 随机内存泄漏

java - 使用 Java 和 MongoDB 进行参数化查询

php - MongoDB 及其驱动程序能否保留文档元素的顺序

php - 在包含文件中使用命名空间

php - PHP登录文件不起作用。继续返回登录页面而不是用户个人资料

node.js - MongoDB 请求 : Filter only specific field from embedded documents in embedded array

node.js - 服务器端的 Mongoose 分页

arrays - 如果存在则更新数组中的元素,否则在 MongoDb 中的该数组中插入新元素