2017-06-18 108 views
0

我正在尝试查找与node.js中的自定义字段匹配的所有文档。如何使用MongoDB查找与自定义字段相匹配的文档?

的Node.js代码:

req.app.db.models.Property.find({ 
    user: { 
    id: req.params.id 
    } 
}).exec(function(err, user) { 
    if (err) { 
    return next(err); 
    } 
    console.log("id:" + req.params.id); 
    console.log("user:" + user); 
    res.status(200).json(user); 
}); 

但是,控制台这样表示

id:5941cfc42df14b2fe811d531 
user: 

和架构是类似下面

user: { 
     id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, 
     name: { type: String, default: '' }, 
     email: { type: String, defaul: ''} 
    }, 
propertyType: { type: String, default: '' }, 
    .......... 
    } 

它似乎可以”找到文件。 这有什么问题? Property Collection上有几个文件。

+0

'.find({“user.id”:req.params.id})'。使用'{“user”:{“id”:req.params.id}}'正在寻找除“id”属性之外的“用户”键下没有“其他”的文档。这当然是不正确的,因为它与模式不一致。请参阅核心文档中的[“点符号”](https://docs.mongodb.com/manual/core/document/#embedded-documents)。 –

+0

嗨尼尔。我刚刚用.find({“user.id”:req.params.id})检出了它,现在它正在工作。你能提供它作为答案吗? –

回答

0

问题出在您的查询中,它发现用户只有一个对象ID。 所以你实际上等同于“user”和“{id:req.params.id}”,它只返回id参数。因此,对于您的解决方案,请执行以下操作:

var query = {'user.id':req.params.id} 
Property.find(query).exec(function(err, user) { 
    if (err) { 
    return next(err); 
    } 

如果要指定返回对象的类型(如果找到)。 可以按如下方式提到它:

Property.find(query,'user.id user.name').exec(...) 

这将返回一个对象,具有用户ID和电子邮件,而不是名字。

相关问题