MongoDB 使用mongoose直接查询sub doc 的Id?
PHP中文网
PHP中文网 2017-05-02 09:19:25
0
1
701

我有一个schema:
这个schema有一个sub doc 叫address,插入address数据之后,address会自己有一个对应的_id.

我的问题是,每次查询这个address的时候,是否需要首先找到这个account,然后遍历account的address,或者可以直接通过address的_id来找到对应的address?

  var AccountSchema = new mongoose.Schema({
    email:     { type: String, unique: true },
    password:  { type: String},
    phone:     { type: String},
    name:      {type: String},
    address:   {type: [{
      name: { type: String},
      phone: { type: String},
      type: { type: String},
      addr: { type: String}
    }]},
  });
PHP中文网
PHP中文网

认证0级讲师

répondre à tous(1)
给我你的怀抱

Tout d'abord, votre compréhension de la définition de subDoc est fausse. subDoc devrait également être une instance générée par un Schema -> sous-document ModelSchema

const AdressSchema = new mongoose.Schema({
      name: String,
      phone: String,
      type: String,
      addr: String
    })

const AccountSchema = new mongoose.Schema({
    email:     { type: String, unique: true },
    password:  String,
    phone:     String,
    name:      String,
    
    //重点在这里
    address:   [AdressSchema]
  })
Encore une chose, si vous n'avez pas

, la façon originale d'écrire est fausse Et même si elle est définie, l'attribut 自定义的 SchemaTypes ne peut pas pointer vers un objet type.

address: {
    //这样就是绝对错误 
    type: [
        {
            name: { type: String},
            phone: { type: String},
            type: { type: String},
            addr: { type: String}
        }
    ]
}
Parce que

mangouste est légale par défaut SchemaTypes juste String, Number, Array, ObjectId, Mixed... et il doit y en avoir quelques-unes dans le document En plus, si vous le faites. not set Pour tout type personnalisé, toute autre valeur après l'attribut type signalera une erreur.

Si vous ne souhaitez pas définir de sous-document, vous pouvez faire quelque chose comme ceci :

const AccountSchema = new mongoose.Schema({
    email:     { type: String, unique: true },
    password:  String,
    phone:     String,
    name:      String,
    address:   {
        name: String,
        phone: String,
        adrType: String,        //这里用 adrType 替代你的 type, 避免和保留字重名
        addr: String
    }
  }
)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal