再次需要你的帮助,希望这个项目,我在这里的答案将是最后一个。我已经看到它是一个相当常见的问题,但我已经尝试了另一个Stack Overflow post上的提示,以及Google Group提出的一个提示,但解决方案尚未解决问题。为我工作。
我的代码有点像:
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();
但我没有得到任何结果,我知道有。
非常感谢提前!
更新
已经最小化了上面的代码示例,如果我自己查询字符串值,则此测试有效,只查询ObjectId是否失败,我知道它存在。
JSON UPDATE
以下是我要找的内容:
{
"_id" : ObjectId("50e3dcddf30375180c078f85"),
"venue_id" : "50e3dcdbf30375180c078f64",
"racetype" : "A"
}
突然之间,我相信我的回答已经清楚了。是因为venue_id实际上是一个字符串?如果是这样,我可以按原样保留我的mongoose模式,并在查找字符串时对查询进行强制转换吗?或者我应该更改这些值的存储方式(从我开发的单独的.net应用程序中)作为ObjectId&s进行插入?
目前正在进行另一个查询,当前的mongoose模式和数据库[实际设置]的方式,使用populate()可以很好地填充引用表(venue_id)的结果,方法是这个模型是目前设置,只有上述查询的差异,我没有指定venue_id ...
感谢。
答案 0 :(得分:2)
是的,问题正在发生,因为架构中的venue_id
的数据类型(ObjectId)与doc(String)中的数据类型不匹配。所以find
正在查找ObjectId值,但找不到匹配项,因为它是doc中的字符串。
正确的解决方法是编写一个小程序来将文档中的venue_id
值更新为ObjectIds而不是字符串,然后您的查询将起作用。这也会将这些字段的大小从24个字节缩小到12个。