2016-05-31 6 views
0

私のようなデータの一覧移入マングースを使用します。なぜモンゴースの人口が私に違法な配列を返すのか、どうやってそれをするのですか?

Account.findOne({_id:accountId}).populate({ 
      path:"orders.order", 
      match:{_id:orderId}, 
      selecte:'', 
      options:{ 
       limit:1 
      } 
      }).exec(function (err, doc) { 
       if (err) { 
       callback(err); 
       } 
       callback(doc); 
      }) 
     } 

を、私は何を得る:

[ { order: null }, 
    { order: null }, 
    { order: null }, 
    { order: null }, 
    { order: null }, 
    { order: null }, 
    { order: 
    { date: Tue May 31 2016 12:56:36 GMT+0800 (HKT), 
     dishs: [Object], 
     __v: 0, 
     message: 'plz deliver after 5 p.m', 
     price: 5, 
     address: [Object], 
     shop: null, 
     user: 574bfebc29cf722c17f8eafe, 
     _id: 574d198451615ce01a5e1a81 } } ] 

が、私は、このデータが配列であると思いますが、

   console.log(typeof doc.orders);//object 
       console.log(doc.orders.length);//undefined 
       console.log(doc.orders[0].order);//error 
       console.log(Array.isArray(doc.orders));//false 

私にはありませんこのデータのヌル値を削除する方法と、このデータを配列に変更する方法を知っていますか?

ところで、私はそれが条件に一致しない場合、mongoose populate.matchはnull値を返すと主張の投稿を見つける、それは本当ですか?

答えて

0

私は誤ってスキーマを間違った方法で定義しています。

間違ったスキーマ:

orders:{order: [{type: mongoose.Schema.Types.ObjectId, ref:'Order'}] } 

インクルードは、あなたが何を移入するため、アレイ内のスキーマ定義正しい方法:この後

orders:{type:[{ 
    order:{type: mongoose.Schema.Types.ObjectId, ref:'Order'} 
}]} 

を、使用populate.matchはあなたに法的を与えますあなたはそれを通常の配列のようにすることができます。

関連する問題