Skip to content

【已解決】我希望做一個 資料庫,達成 join 的效果 #27

@weweaaa

Description

@weweaaa

目的

我希望做一個 資料庫,達成 join 的效果

使用的工具

伺服器:node.js + express
模板:hogan
資料庫:MongoDB
連接資料庫工具:Mongoose

操作流程

建立 Model:

var store_info = mongoose.model(
  'store_info', 
  mongoose.Schema({
    store_name: String,
    store_phone: String,
    store_address: String,
    is_delete: {type: Boolean, default: false}
  }, {
    timestamps: {createdAt: 'insert_date', updatedAt: 'update_date'}
  }
), 
'store_info');

var product_info = mongoose.model(
  'product_info', 
  mongoose.Schema({
    product_name: String,
    product_type: String,
    product_price: Number,
    product_size: String,
    product_amount: Number,
    product_picture: String,
    product_date: Date,
    is_delete: {type: Boolean, default: false}
  }, {
    timestamps: {createdAt: 'insert_date', updatedAt: 'update_date'}
  }
), 
'product_info');

var check_list = mongoose.model(
  'check_list', 
  mongoose.Schema({
    store_id: {type: Schema.Types.ObjectId, ref: 'store_info'},
    check_date: Date,
    is_delete: {type: Boolean, default: false},
    detail: [new Schema({
      product_id: {type: Schema.Types.ObjectId, ref: 'product_info'},
      product_price: Number,
      check_amount: Number
    }, {
      timestamps: {createdAt: 'insert_date', updatedAt: 'update_date'}
    })]
  }, {timestamps: {createdAt: 'insert_date', updatedAt: 'update_date'}}
),
'check_list');

程式碼

var model = mongoose.model('check_list');
model.find().populate('store_id').exec();

查詢結果

docs:
[ { _id: 5997e814a524cd07c03f2bd7,
    update_date: 2017-08-19T07:26:12.566Z,
    insert_date: 2017-08-19T07:26:12.566Z,
    __v: 0,
    store_id:
     { _id: 5997e433366d4513b0e420dd,
       update_date: 2017-08-19T07:09:39.783Z,
       insert_date: 2017-08-19T07:09:39.783Z,
       __v: 0,
       store_name: '店2',
       store_phone: '452674',
       store_address: '陸2',
       is_delete: false },
    check_date: 2017-08-19T00:00:00.000Z,
    detail: [ [Object] ],
    is_delete: false } ] 

docs[0].detail:
[ { _id: 5997e814a524cd07c03f2bd8,
    check_amount: 1,
    product_price: 1,
    product_id: 5973311022fbb51034da23d6 } ]

遇到的問題 1

查詢資料回來的結果,
check_list.store_id 裡寫的 ref 有正確參考到 store_info 的 model
但是 check_list.detail.product_id 寫的 ref 卻參考失敗

遇到的問題 2

要對 subdocument 裡面下條件查詢,語法是甚麼?
例如:

check_list.find(
  {detail: [{check_amount: 1}]}
)

或是

check_list.detail.find(
  {check_amount: 1}
)

【解決】 問題 1 謝謝大大的解答,解決辦法如下

model.find().populate(['store_id','detail.product_id']).exec();

或是

model.find().populate('store_id').populate('detail.product_id').exec();

【解決】 問題 2 謝謝大大們的解答,解決辦法如下

check_list.find({'detail.check_amount': 1}).exec();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions