我试图根据子文档数组值获取集合中的所有文档。这是我在寻求的集合中的数据结构:
Request()
我应该指出这些对象的模式是这样定义的:
活动:
HomeController
MemberGroup:
{
_id: ObjectId('...'),
name: "my event",
members:
[
{
_id: ObjectId('...'),
name: "family",
users: [ObjectId('...'),ObjectId('...'),ObjectId('...')]
},
{
_id: ObjectId('...'),
name: "work",
users: [ObjectId('...'),ObjectId('...'),ObjectId('...')]
}
]
}
当然,User只是一个带有id的任意对象。
我想要获取的内容:我想在其member.users字段中检索所有具有特定用户ID的事件。
我不确定它是否可以在一次通话中发生,但这是我尝试过的:
{
name: { type: String },
members: {type: [{ type: ObjectId, ref: 'MemberGroup' }], default:[] }
}
这种语法有效,但即使我知道有匹配的元素(使用robomongo可视化数据库),也不返回任何元素
答案 0 :(得分:0)
所以经过在stackoverflow中的长时间搜索后,我遇到了很好的answare:
MongoDB: How to find out if an array field contains an element?
我的查询改为以下内容,这给了我想要的结果:
var userId = new mongoose.Schema.ObjectId('57d9503ef10d5ffc08d6b8cc');
events.find({}, {members: { $elemMatch : { users: { $eq: userId} } }})
注意使用第二个find参数指定查询限制而不是第一个查询限制(这是奇数)