Mongoid查询使用'$ in'运算符检索嵌入对象

时间:2013-05-03 15:55:30

标签: mongodb mongoid

我是mongoid的初学者,所以我为基本问题道歉。

我正在寻找一个mongoid语句,它会抛出如下的mongoDB查询:

db.mycollection.find({"status.user.name": {$in:["jack","mary"]}}

mongoDB中的mycollection中有两个文档

{ "status": {"user: {:name : "jack"}} }
{ "status": {"user: {:name : "mary"}} }

我尝试使用mongoid进行以下查询,但它没有获取任何文档:

MyCollection.where("status.user.name" => {'$in' => ["jack","mary"]})
MyCollection.in("status.user.name" =>  ["jack","mary"])

于2013/05/04更新

对不起提交问题时我没有掌握实际情况。但现在我明白发生了什么并解决了这个问题。我为那些在同一问题上挣扎的人更新了问题。

问题来自于我对“嵌入”“引用”的误解。

在上述情况中,user嵌入了mycollection。然后,in方法可以获取所有两个文档。

MyCollection.in("status.user.name" => ["jack", "mary"]).size
=> 2

但是,在我的实际情况中,mycollection刚刚引用了user集合。

mycollection collection
{ "status": {"user_id": xyzxyz} }
{ "status": {"user_id": abcabc} }
user collection
{ "_id":xyzxyz, "name": "jack" }
{ "_id":abcabc, "name": "mary" }

这就是我无法使用wherein方法获取任何文档的原因。根据我的理解,我无法通过user仅使用一个查询获取mycollection文档,因为MongoDB不是RDBMS,并且不支持这种关系查询。

MyCollection.in("status.user.name" => ["jack", "mary"]).size
=> 0

1 个答案:

答案 0 :(得分:0)

怎么样:

MyCollection.in(status.user.name: [ "jack", "mary" ]).find();