mongodb选择使用关联

时间:2015-01-28 23:39:08

标签: mongodb mongodb-query

我有两个集合,user_logs和users,user_logs文件有user_id字段,所以我需要来自user_logs的一些数据,但在同一个查询中我想检查用户与当前user_log相关的其他字段是否为空。我该怎么做?

1 个答案:

答案 0 :(得分:0)

查询一次只能访问一个集合。 Mongodb不支持连接。 这就是为什么他们建议您将引用的数据嵌入到文档中的原因。 如果每个用户的日志文档不是太大,那么您可以更改用户集合中的嵌入信息。 给你这样的东西。

嵌入式用户集:

{
    user_id : "uid1",
    logs : [
        { message : "Error: System shutdown", date : "2014-11-11" },
        { message : "Error: System shutdown", date : "2014-11-13" }
    ]
}

但是,如果您想保留当前的结构,那么您将不得不执行两个查询来查找usersuser_logs集合之间的相关信息。

实施例

db.user_logs.insert([
    { _id : "ul1", log : "code 1", user_id : "u1" },
    { _id : "ul2", log : "code 2", user_id : "u1" }
]);
db.users.insert([
    { _id : "u1", name : "bob", user_logs_id : "ul1" },
    { _id : "u2", name : "smith", user_logs_id : "ul2" }
]);

var userId = db.user_logs.findOne({}).user_id;
db.users.findOne({ _id : userId })
//outputs
{ "_id" : "u1", "name" : "bob", "user_logs_id" : "ul1" }