2015-04-02 60 views
0

一个字符串我有利用猫鼬MongoDb.js /猫鼬发现()翻译中的ObjectId

模式1

var schema = mongoose.Schema({ 
    name: { 
     type: String, 
     required: true 
    } 
}); 
return mongoose.model('User', schema); 

模式2

var schema = mongoose.Schema({ 
    name: { 
     type: String, 
     required: true 
    }, 
    user: { 
     type: mongoose.Schema.ObjectId, 
     ref: 'User', 
     required: true 
    } 
}); 
return mongoose.model('Page', schema); 

两个模式我页面收集数据

_id
551b0cdf63dc96e9c39de0f8
551b0d1563dc96e9c39de0f9
551b0d2d63dc96e9c39de0fa
551b0d4363dc96e9c39de0fb
551daae0f4cb312c62dcbc1e


Cazaquistao
俄罗斯
中国
澳大利亚
萨尔瓦多

用户
5515c7aaaf6d59fea26d7185
5515c7aaaf6d59fea26d7185
5515c7aaaf6d59fea26d7185
5515c7aaaf6d59fea26d7185
5515c7c9af6d59fea26d7186

当我通过用户在模式2搜索,我不找到任何结果。

猫鼬翻译猫鼬错误地转换查询。

查询

var test = Page.find().select("_id").where({"user" : "5515c7aaaf6d59fea26d7185"}).exec()     
.then(function (t) {     
    console.log("hi", t);     
    }); 

查询错误

db.pages.find({ user: ObjectId("5515c7aaaf6d59fea26d7185") }) 

没有结果

查询翻译因为它应该是

db.pages.find({ user: "5515c7aaaf6d59fea26d7185" })= 

4结果

什么有什么建议做才能解决此问题?

回答

0

如果user是页面文档中的字符串,那么您的模式需要反映该模式,否则Mongoose会尝试将其转换为模式中的类型(本例中为ObjectId)。

因此,请在user模式的字符串:

var schema = mongoose.Schema({ 
    name: { 
     type: String, 
     required: true 
    }, 
    user: { 
     type: String, 
     ref: 'User', 
     required: true 
    } 
}); 
+0

没有,用户犯规字符串对象,但我想我知道发生了什么。该集合创建了错误。 – Thiago 2015-04-03 12:23:23

+0

好的。可能最好只是删除问题。 – JohnnyHK 2015-04-03 15:05:08

-1

我解决了传递对象ID而不是字符串