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

我有一個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 生成的实例, 简单来说, 就是得有一个子文档的 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 預設的合法SchemaTypesSchemaTypesString, Number, Array, ObjectId, Mixed...String, Number, Array, ObjectId, Mixed...

那麼幾個, 除文檔里肯定有幾個。此以外, 如果你沒有定義任何自訂Type, 那在type 屬性後面任何其他的值都是會報錯的.

如果你不想定義子文檔,你可以像下面這樣做:🎜
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
    }
  }
)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!