我在事件集合中有一些事件,在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
}
答案 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
}