我在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是用户名。
我是在做错误的$或查询(我在文档中看到的是'$或'在不同的字段上执行)? 有没有更好的办法完全取消这个? 提前谢谢!
答案 0 :(得分:1)
您应该使用查询。在mongo-syntax中:
db.users.find({ "_id" : { $in : [ "david", "kevin" ] } })