猫鼬模式参考和填充

Posted

技术标签:

【中文标题】猫鼬模式参考和填充【英文标题】:Mongoose Schema Ref & Populate 【发布时间】:2017-09-13 16:45:13 【问题描述】:

我想用来自同一集合的一组文档填充我的数据库查询。在我无法判断错误是在我的模型中还是在我的查询中之前从未引用过。

我当前的架构是这样的,

var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    shortid = require('shortid')

/* Calendar Schema */
var CalendarSchema = mongoose.Schema(
  _id: 
    type: String,
    unique: true,
    'default': shortid.generate
  , 
  title:String,
  mixin: [_id:  type: String, ref: 'calendarlist' ],
  notes: Array
)

module.exports = mongoose.model('calendarlist', CalendarSchema)

我的示例文档如下所示,


    "_id" : "mixtest",
    "mixin" : [ 
        
            "$ref" : "calendarlist",
            "$id" : "cVkKRkNtB-"
        
    ],
    "title" : "mix test",
    "__v" : 3,
    "notes" : []


and



    "_id" : "cVkKRkNtB-",
    "title" : "found doc",
    "__v" : 3,
    "notes" : []

我的查询看起来像这样,

calendarlist.find().populate('mixin').sort(
              title: 1
            ).exec(function(err, s) 
              if (err) console.log(err) 
              console.log(s))

非常感谢您的建议、提示或一般说明。谢谢。

【问题讨论】:

【参考方案1】:

This link 表示引用方式如下:

fans: [ type: Number, ref: 'Person' ]

您是否尝试过以下方法?:

mixin: [  type: String, ref: 'calendarlist' ],

另外,您的模型名称是“日历列表”。你的收藏被称为“日历列表”吗?因为根据this link,“Mongoose 会自动查找您的型号名称的复数版本”。

【讨论】:

去掉多余的_id 同样的错误 - CastError: Cast to string failed for value "DBRef _bsontype: 'DBRef', namespace: 'calendarlist', oid: 'cVkKRkNtB-', db: undefined " at path " _id"...... 抱歉 - 是的...试过了 - mixin: [ type: String, ref: 'calendarlist' ], 你的收藏不应该叫日历和你的模型日历吗? 最后,我没有在实际文档中正确引用-“mixin”:[“id1”、“id2”、“id3”等]。 @Treefish-Zhang 非常感谢您的帮助和支持。

以上是关于猫鼬模式参考和填充的主要内容,如果未能解决你的问题,请参考以下文章

为啥需要猫鼬填充?

使用 graphql 和 nodejs 填充猫鼬模式

猫鼬模式参考与嵌入数组

猫鼬模式参考与嵌入数组

猫鼬填充没有模型的嵌套模式

猫鼬填充两个简单的模式