再次需要你的帮助,希望对于这个项目,我在这里得到的答案将是最后一个。我发现这是一个相当常见的问题,但我已经尝试过另一个问题堆栈溢出帖子 https://stackoverflow.com/questions/7878557/cant-find-documents-searching-by-objectid-using-mongoose,以及一个由谷歌集团 https://groups.google.com/forum/?fromgroups=#!topic/mongoose-orm/5H4XyGSyncs,但解决方案对我不起作用。
我的代码有点像:
mongoose = require('mongoose');
Schema = mongoose.Schema;
mongoose.connect(MONGO_SERVER);
ObjectId = Schema.ObjectId;
var RacesSchema = new Schema({
venue_id : { type: mongoose.Schema.ObjectId, ref: 'Venues' },
racetype : String
});
var races = mongoose.model('Races', RacesSchema );
function test() {
var MyObjectId = require('mongoose').Types.ObjectId;
queryVenue = new MyObjectId("50e3dcdbf30375180c078f64");
races.find({venue_id: queryVenue, racetype:'Test'})
.exec(function(err,data) {
}
test();
但我没有得到结果,我知道有结果。
提前谢谢了!
UPDATE
已最小化上述代码示例,如果我自己查询字符串值,则此测试有效,仅查询 ObjectId 就会失败,而且我知道它存在。
JSON更新
这是我正在寻找的:
{
"_id" : ObjectId("50e3dcddf30375180c078f85"),
"venue_id" : "50e3dcdbf30375180c078f64",
"racetype" : "A"
}
突然间,我相信我的答案已经清晰了。仅仅是因为venue_id实际上是一个字符串吗?如果是这样,我可以保持我的猫鼬模式不变,并在查找字符串时对查询进行转换吗?或者我应该更改这些值的存储方式(来自我开发的单独的 .net 应用程序)以作为 ObjectId 插入?
目前,对于另一个查询,当前的猫鼬模式和数据库的[实际设置]方式,使用 populate() 可以很好地用该模型当前设置的方式填充引用表 (venue_id) 的结果,唯一的区别是在上面的查询中,我没有指定venue_id...
Thanks.