Mongoose:具有附加属性的dbref数组

时间:2013-06-23 16:33:17

标签: node.js mongoose

我正在使用猫鼬并有两个模式,useralbum

UserSchema = new mongoose.Schema

  name:                         
    type:     String
    required: true

  albums: [
    type:   mongoose.Schema.Types.ObjectId
    ref:    'Album'
  ]

, collection : 'gallery'

UserModel = mongoose.model 'User', UserSchema


AlbumSchema = new mongoose.Schema

  name:                         
    type:     String
    required: true
    unique:   true

  owner:
    type:   mongoose.Schema.Types.ObjectId
    ref:    'User'

  # ....

, collection : 'gallery'

AlbumModel = mongoose.model 'Album', AlbumSchema

当然,AlbumModel还有其他一些属性,例如created_timemodified_time,当然还有images。 每个用户都是一个或多个相册的所有者。出于性能原因,我想在用户模型上存储所有相册的引用(这是dbref?)。除了ObjectId之外,我想存储专辑名称,这是id旁边最常用的属性。结果看起来应该像(例如json):

{
    "name":   "John Doe",
    "albums": [
       {
          "id":   "1234567890",
          "name": "Sample album"
       },
       {
          "id":   "9876543210",
          "name": "Sample album 2"
       }
    ]
}

使用猫鼬可以吗?用户模型中的专辑名称是否已更改(如果已更改)(

1 个答案:

答案 0 :(得分:1)

  

出于性能原因,我想在用户模型上存储所有相册的引用(这是一个dbref吗?

是的,DbRef只是文档中的属性,是不同文档的ObjectId。

  

这是否可以使用猫鼬?

是的,您可以像这样定义此架构:

UserSchema = new mongoose.Schema

  name:                         
    type:     String
    required: true

  albums: [{
    id: {
      type:   mongoose.Schema.Types.ObjectId
      ref:    'Album' },
    name: String
  ]
  

用户模型中的专辑名称是否会自动更新(如果已更改)(很少发生)?

不,但您可以在Album架构上使用mongoose postSave挂钩来保持此非规范化数据的同步。