在Mongoose中是否可以执行一个查询,其中两个搜索参数是ObjectIds(一个是ref)?
例如,给定以下模式:
var ObjectId = mongoose.Schema.ObjectId;
var fooSchema = new mongoose.Schema({
...
});
schemas.Foo = mongoose.model("Foo", fooSchema, "foo");
var barSchema = new mongoose.Schema({
fooId : { type: ObjectId, ref: "Foo" },
...
});
schemas.Bar = mongoose.model("Bar", barSchema, "bar");
我希望这可行:
schemas.Bar.find({
_id : mongoose.Types.ObjectId(req.params.barId),
fooId : mongoose.Types.ObjectId(req.params.fooId)
},
function(err, result)
{
...
}
);
但它返回一个空集。奇怪的是,如果我删除其中一个或另一个标准。
schemas.Bar.find({
_id : mongoose.Types.ObjectId(req.params.barId)
}, ...);
...或
schemas.Bar.find({
fooId : mongoose.Types.ObjectId(req.params.fooId)
}, ...);
我在这里做错了什么?我可以在数据库中看到原始数据,但如果我在同一个查找中同时使用两个ObjectId,则查询始终为空。
非常感谢
答案 0 :(得分:1)
该死的,我在几个小时的盯着屏幕后才解决了。
当你插入一个Bar文档时,你必须明确地告诉Mongoose,所讨论的ref值似乎是一个ObjectId,即使该值来自一个Foo实例,其中_id被定义为ObjectId!去图..我猜Mongoose会将它强制转换为字符串吗?
(new schemas.Bar({
fooId : mongoose.Types.ObjectId(somePreviouslyRetrievedFoo._id),
...
})).save(...)
最后,它有效!希望这有助于其他人绊倒它!