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

我有一个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级讲师

全員に返信(1)
给我你的怀抱

まず、subDoc の定義の理解が間違っています。subDoc も別の Schema ->Model である必要があります。 code> によって生成されたインスタンスには、簡単に言えば、サブドキュメントの SchemasubDoc 的定义就错了, subDoc 应该也是一个由单独的 Schema -> Model 生成的实例, 简单来说, 就是得有一个子文档的 Schema

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]
  })

另外多说一句, 如果你没有自定义的 SchemaTypes的话, 原来的写法就是错的. 而且就算定义了, 属性type也不可以指向一个对象

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

因为 mongoose 默认的合法 SchemaTypesString, Number, Array, ObjectId, Mixed... が必要です。 リーリー もう 1 つ、custom SchemaTypes がない場合は、元の記述方法が間違っています。また、たとえそれが定義されていたとしても、属性 type はオブジェクトを指すことができません。

リーリー

mongoose

はデフォルトで合法であるSchemaTypes🎜 だけString、Number、Array、ObjectId、Mixed...🎜 非常に多く、さらに、カスタム Type を定義しない場合、type 属性の後の他の値はエラーを報告します。🎜 🎜サブドキュメントを定義したくない場合は、次のようにすることができます:🎜 リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート