【问题标题】:Mongoose query for subdocument containing array of objectId'sMongoose 查询包含 objectId 数组的子文档
【发布时间】:2014-07-01 15:08:01
【问题描述】:

我有以下架构:

var groupSchema = mongoose.Schema({
name: {type: String, index: {unique: true, dropDups: true}},
createdBy: String,
availableModules: [Number],
members: [{type: Schema.Types.ObjectId, ref: 'User'}]
});

“成员”字段只是来自用户表的 ObjectID 的直接数组。在采取其他操作之前,我需要检查成员子文档集合中是否存在给定的 ObjectId (user._id)。

我尝试过类似的东西:

Group.find({req.body.uid}, {$in: {"members"}}, function(grps){..});

但这不起作用。我尝试了无数其他方法,但似乎没有任何效果。我认为这很容易,但我似乎无法弄清楚。

编辑进一步调查:

User.findOne({"local.email": req.body.user.email}, function(err, user){
    Group.find({"members": user._id}, function(grps){
        if(grps){ //do something}
    });
});

grps 是空的,不管我怎么做。在 mongo 控制台中,它在使用 ObjectId("..") 表示法时返回值

db.groups.find({members: ObjectId("5371a4763b32c3620728acb5")})

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:
    Group.find({members: req.body.uid}, function(err, items){})
    

    【讨论】:

    • 这是我的第一次尝试——所以我想这里可能还有其他东西在起作用。它仍然无法正常工作。如果我在 mongo 控制台中键入此查询,并使用 ObjectId("......") 语法..它返回..所以它是正确的,但是我的类型由于等于或其他原因而不匹配它在内部为 mongo 执行。
    • 我将扩展代码添加到原始示例中 - 看看,如果我遗漏了一些愚蠢的东西,请告诉我
    • 回调无效,函数(err,items),不是函数(items)。第一个参数是错误,第二个是返回的数组。
    猜你喜欢
    • 2016-06-13
    • 2018-06-24
    • 1970-01-01
    • 2014-09-11
    • 2015-04-27
    • 2020-07-16
    • 2013-07-15
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多