0

我正在使用猫鼬并有两个模式,auser和 aalbum

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_timeor modified_time,当然还有images。每个用户都是一个或多个相册的所有者。出于性能原因,我想在用户模型上存储所有专辑的引用(这是一个dbref?)。除了 ObjectId 之外,我还想存储专辑名称,这是在 id 旁边读取的最常用的属性。结果应该类似于(例如 json):

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

这可以使用猫鼬吗?如果用户模型中的专辑名称发生更改(这种情况应该很少发生),它是否会自动更新?

4

1 回答 1

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 挂钩来保持这些非规范化数据同步。

于 2013-06-23T20:14:04.880 回答