MongoDb.js / Mongoose find()在ObjectId中翻译一个String

时间:2015-04-02 22:30:39

标签: node.js mongodb express mongoose objectid

我有两个使用Mongoose的模式

架构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时,我找不到任何结果。

mongoose翻译mongoose错误地转换查询。

查询

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结果

有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果user是您网页文档中的字符串,那么您的架构需要反映这一点,或者Mongoose会尝试将其强制转换为架构中的类型(在这种情况下为ObjectId)。

所以在模式中使user为字符串:

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

答案 1 :(得分:-1)

我解决了传递objectId而不是String

的问题