【发布时间】:2013-11-25 02:16:20
【问题描述】:
我正在尝试根据属性 a 子文档从我的数据库中获取文档列表。我使用的模型和模式是:
var elementSchema = new mongoose.Schema({
name: String,
description: String,
_story: { type: mongoose.Schema.Types.ObjectId, ref: 'Story' },
date_created: Date,
date_modified: Date,
};
var storySchema = new mongoose.Schema({
title: {type: String, default: '', trim: true},
isPrivate: {type: Boolean, default: false},
});
mongoose.model("Story", storySchema);
mongoose.model("Element", elementSchema);
我正在尝试获取属于非私有故事的所有元素,根据我在这里看到的一些帖子(1、2、3),解决方案是使用 _story .isPrivate 与查找。我目前正在这样做:
Element.find({'_story.isPrivate': false})
.populate('_story')
.exec(function(err, elements){
if(err){
return next(err);
}
else if(elements.length > 0){
return res.send(elements);
}
else{
return res.send(404, {message: "No elements found"});
}
});
但结果总是一个空集(返回 404)。在没有条件的情况下,find 返回所有元素并正确填充 _story。我还激活了调试输出以查看正在执行的查询,我得到了这个:
Mongoose: elements.find({ '_story.isPrivate': false }) { fields: undefined, safe: undefined }
尝试在 MongoDB 中执行此操作我没有得到任何结果。这里有什么问题?
谢谢
【问题讨论】:
-
MongoDB 不支持连接。
_story的populate出现在find查询完成之后,因此您无法在查询中引用其字段。 -
但是在我链接的问题中,他们通过使用我使用的查询解决了同样的问题。我就是不能让它和我的一起工作。
-
它仅在故事文档嵌入到您的元素文档中时才有效,而不是在您的案例中作为参考时才有效。