2017-01-14 8 views
0

とアップデートでは動作しません$私はマングースに問題があると私はモジュールのマングースを使用してMongoDBの中の文書を更新したい、これが私のスキーマです:

var User = new mongoose.Schema({ 

     name: String, 
     email: String, 
     list_houses: [{ 
      id_house: String, 
      price: Double 
     }], 
     ... 

    }); 

私は以下のコードを使用して繰り返すことなく、これはそれが

User.update({'name': Name}, 
{$addToSet: {'list_houses': { 'id_house': new_houses , 'price': new_prices } } } , 
    if(err)console.log(err); 
    console.log(result); 
}); 

を動作しません「id_house」の値を追加したい、私はこれを実行すると、BDでの結果は次のとおりです。

>db.users.find().pretty() 
{ 
    "__v" : 0, 
    "_id" : qweqweqweqweqweqwe, 
    "email" : [email protected], 
    "name" : Richard Smith, 
    "list_houses" : [ ], 
    ..... 
} 

私も$ pushを使いましたが、どちらもうまくいきませんでしたが、私のコードで何が問題になったのか分かりません。

+0

物事のカップル。見つけたコレクションに 'name'フィールドがないので、更新は行われません。あなたが間違ったラベル 'id_houses'と埋め込みドキュメントの' id_house'を使用している他のもの – Veeram

+0

ありがとう、あなた!それは一例でしたが、私の問題を解決する方法を知っていますか?コールバックの代わりに – CopitoDeNieve97

+0

を使用すると、2行が直接書き込まれます。それは問題を引き起こすかもしれません。同じ正確なコードスニペットを使用していますか? –

答えて

0

$addToSetは、配列内のオブジェクト値では機能しません。

あなたはなぜ私に尋ねますか? ロジックだから{a:1}{a:1}に等しくない場合、あなたが同じ値を持つ文字列/番号などを比較したときに、オブジェクト

trueではなく、を得るのですかJSでは、簡単です。もちろん、オブジェクトは参照と比較されるからです。

は、今すぐあなたの問題を解決するには、手動

それを行う検索を使用してリストを取得する必要がありますです。あなたのオブジェクトが存在する場合はリストにチェックインしてください。リストに追加しない場合。これであなたは、このデータと文書ではないかもしれまた、検索クエリ内のあなたのオブジェクトの詳細を指定し、ちょうど見つけることができます

(挿入する)

+0

これが当てはまる場合、 '$ push'はうまくいったはずですが、OPによれば、' $ push'はどちらも動作しません。 –

+1

$ addToSetが比較されます。 $ push doesntは配列の比較と挿入もしません。 OPの正確な問題があると私は思う –

関連する問題