通过引用的Mongoose findOne返回null

时间:2016-07-27 10:55:06

标签: node.js mongodb mongoose

我在事件集合中有一些事件,在users集合中有一些用户。 我在另一个集合中有事件和用户的映射。该集合中的event_id字段是对事件集合(ObjectId)的引用。但是当我使用以下命令搜索模式时,我得到null作为响应

db.eventusers.findOne({event_id :'57988cd30e9811750324c080'})

返回null

另一方面,当我使用不是引用的用户字段进行搜索时,只是包含用户ID的字符串,我得到如下结果。

db.eventusers.findOne({user_id :"578cdcdd56eaec041b6caf3e"})
{
    "_id" : ObjectId("57988d190e9811750324c081"),
    "created_at" : "1469615385595",
    "updated_at" : "1469615618502",
    "user_id" : "578cdcdd56eaec041b6caf3e",
    "event_id" : ObjectId("57988cd30e9811750324c080"),
    "deleted" : false,
    "invited" : false,
    "host" : true,
    "status" : -1,
    "__v" : 0
} 

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。如果字段在Mongoose Schema中定义为Schema.Types.ObjectId,那么在Query中,id应该是ObjectId而不是String。因此,不是查询{event_id :'57988cd30e9811750324c080'},而应该是{event_id :ObjectId('57988cd30e9811750324c080')}

db.eventusers.findOne({event_id :ObjectId('57988cd30e9811750324c080')})
{
    "_id" : ObjectId("57988d190e9811750324c081"),
    "created_at" : "1469615385595",
    "updated_at" : "1469615618502",
    "user_id" : "578cdcdd56eaec041b6caf3e",
    "event_id" : ObjectId("57988cd30e9811750324c080"),
    "deleted" : false,
    "invited" : false,
    "host" : true,
    "status" : -1,
    "__v" : 0
}