2

我有以下 Mongodb 文档:

Users : {'_id' : '12345', 'fullname' : 'ABC'}
and 
Files : 
        {'_id' : 'File001', 'path' : 'pathA', 'Users_id' : '12345'}
        {'_id' : 'File002', 'path' : 'pathB', 'Users_id' : '12345'}

如何以引用“用户”文档的“用户 ID”具有完整“用户”文档的方式查询或查找所有“文件”文档?

预期输出:

{'_id' : 'File001', 'path' : 'pathA', 'Users_id' : '12345', 'user' : {'_id' : '12345', 'fullname' : 'ABC'}}
{'_id' : 'File002', 'path' : 'pathB', 'Users_id' : '12345', 'user' : {'_id' : '12345', 'fullname' : 'ABC'}}

通过这种方式,我可以访问文件所有者的全名:file.user.fullname

我感谢你们的任何帮助。谢谢你。

- - 编辑

我正在使用 node-mongodb-native 来访问数据库。

下面是我检索它的代码:

var files = db.collection ('Files');

files.find ({}, {}).toArray (function ( err, filesDoc){
    for ( var index in filesDoc) {
        var fileDoc = filesDoc [ index ];
        var users = db.collection ('Users');
        users.findOne ({'_id' : fileDoc.Users_id}, {}, function (errUser, userDoc){
            if ( ! errUser ) {
                fileDoc.user = userDoc;
            }
        });
    }
});

但是此代码并未将用户分配给所有文件 doc,而仅分配给 filesDoc 数组的最后一个元素。有什么建议么?

4

2 回答 2

3

MongoDB 不支持连接,因此您必须单独查询用户详细信息。如果您使用的是 node.js,Mongoose提供了一个populate功能来帮助简化此操作,因此您可以执行以下操作来获取用户详细信息:

Files.find().populate('Users_id')
于 2013-07-22T04:34:15.530 回答
0

我设法找到了问题的原因。我的代码返回空用户的原因是因为我将 File.Users_id 保存为字符串,并且我正在使用 ObjectId 检索它。

我通过在保存文件之前将 Users_id String 转换为 ObjectId 来修复我的代码。

于 2013-07-22T06:37:54.417 回答