【问题标题】:Why is no document returned while querying a sub-doc in Mongoose?为什么在 Mongoose 中查询子文档时没有返回文档?
【发布时间】:2016-01-09 15:16:04
【问题描述】:

我正在运行以下代码:

var oid = new mongoose.Types.ObjectId(req.params.id);
req.query = {
    toId : {
        id: oid
    },
    deleted : false
};  
X.find(req.query,  function (err, docs){
    if(!err){   
        res.status(responses.ok.status).json(docs);
    }
    else{
        return next(errorHelper(err));
    }
}).select(visibleFields.X);

我想通过 toId.id 字段查询 X 模型。 toId 字段属于 Y 类型。以下是模型定义:

var X = new Schema({
deleted: {
    type: Boolean, 
    required: true, 
    default: false
},      
toId: {
    type: entityId,
    required: true
}   
});

Y 只是一个对象,定义为:

var Y = {
id: {
    type: Schema.Types.ObjectId,
    required: true
},
entityName:{
    type: String,
    required: true,
    enum: entityTypeList
}
};

在我的数据库中,我有一个类似的条目:

{
"_id" : ObjectId("55d1f4fddaea17d3e90a3c55"),

"toId" : {
    "id" : ObjectId("55dde27a0f6ff71b72dc7981"),
    "entity" : "user"
},

"deleted" : false

}

无论如何都应该满足我的标准。

但是,下面的查询:

messages.find({ deleted: false, toId: { id: ObjectId("55dde27a0f6ff71b72dc7981") } }) { fields: { messageType: 1, toId: 1, timesOff: 1, role: 1, read: 1, productId: 1, participantId: 1, oldRole: 1, message: 1, memberId: 1, lessonId: 1, important: 1, fromId: 1, formerInstructorId: 1, timestamp: 1, changedFields: 1, bookerId: 1, assignedInstructorId: 1, accepted: 1, _id: 1 } }  

返回一个空列表。为什么会这样?

【问题讨论】:

  • 你在type: entityId, ...中定义entityid在哪里?

标签: javascript node.js mongodb mongoose subdocument


【解决方案1】:

尝试这样的查询:

req.query = {
    "toId.id": oid,
    deleted : false
};  

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 2020-07-16
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多