基于嵌套的subdoc数组值获取文档

时间:2016-09-15 08:42:52

标签: mongodb mongoose

我试图根据子文档数组值获取集合中的所有文档。这是我在寻求的集合中的数据结构:

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可视化数据库),也不返回任何元素

1 个答案:

答案 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参数指定查询限制而不是第一个查询限制(这是奇数)