MongoDb.js/Mongoose find()翻译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

名称
卡扎奎斯托
俄罗斯
中国
澳大利亚
萨尔瓦多

用户
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个结果

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

如果user是页面文档中的字符串,则您的架构需要反映该字符串,否则Mongoose将尝试将其强制转换为架构中的类型(在本例中为ObjectId)。

因此,使user成为模式中的字符串:

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

我解决了传递objectId而不是字符串的问题

相关内容

  • 没有找到相关文章

最新更新