我想在MongoDb中进行高效的查询,以查找所有在用户组中列出其用户标识的用户。理想情况下,我想把它作为对Mongodb的单个请求。 我想要的对应于SQL中的嵌套选择。 我在蒙戈外壳试过这样:如何在嵌套的Sql select查询中工作嵌套的MongoDb查询
db.user.save({_id:"u1", Name:"u1 name"});
db.user.save({_id:"u2", Name:"u1 name"});
db.user.save({_id:"u3", Name:"u3 name"});
db.usergroup.save({_id:"g1", Users: ["u2","u3"]});
现在这里是选择我想做的事,但没有硬编码[“U2”,“U3”]数组:
db.user.find({_id:{$in:["u2","u3"]}}).forEach(printjson);
这工作正常并返回u2和u3的用户对象。
现在的问题是如何获取用查询提取的$ in操作符中的userid数组,以便可以使用单个请求来创建整个查询。
A “嵌套查询” 像这样不工作:
db.user.find({_id:{$in:db.usergroup.find({_id:"g1"},{_id:0,Users:1})}}).forEach(printjson);
给出了这样的错误: 周二3月27日6时17分41秒未捕获的异常:错误:{ “$ ERR”: “无效查询” ,“代码”:12580} 未能加载:mongoNestedSelect.js
1)这是可能的在mongodb和如何?
2)如何用官方的c#驱动程序做到这一点?
好,谢谢。所以“真正的嵌套查询”在MongoDB中是不可能的。是的,我同意你对ObjectIds的评论,但我只是在这个例子中使用了字符串来保持简单。 – ssn 2012-03-27 06:58:03
正确的是,没有嵌套的查询,您的数据需要进行结构化,以便您可以通过对数据库的单个(或最少数量)请求获得所需的结果。 – 2012-03-27 16:29:48