【问题标题】:MongoDb.js / Mongoose find() translate a String in ObjectIdMongoDb.js / Mongoose find() 翻译 ObjectId 中的字符串
【发布时间】:2015-06-08 00:49:19
【问题描述】:

我有两个使用 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 中搜索时,我没有找到任何结果。

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

关于如何解决此问题的任何建议?

【问题讨论】:

    标签: node.js mongodb express mongoose objectid


    【解决方案1】:

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

    所以将user 设为架构中的字符串:

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

    【讨论】:

    • 不,用户不是字符串对象,但我想我知道发生了什么。集合创建错误。
    • 好的。可能最好只删除问题。
    【解决方案2】:

    我解决了传递 objectId 而不是 String 的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-06
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多