2017-09-04 8 views
0

コレクションが2つあります。carsownersとしましょう。 1つのownerには多くのものがあります。carsそしてone carone ownerにのみ属します。オーナーが死亡したときは、すべての車をcarsコレクションから削除する必要があります。それを行うために私はjsでスクリプトファイルを作成しました。 aliveOwnersundefinedですが、これを実行する最善の方法は何ですか? Mongooseを使って作ることはできますか?他のコレクションにアイテムが見つからない場合はコレクションからアイテムを削除します

MongoClient.connect(url, (err, db) => { 
    assert.equal(null, err); 
    console.log('Connected successfully to server'); 
    var aliveOwners = db.collection('owner').find({}); // TODO. it should get only owner ids 
    console.log(aliveOwners); // undefined, mb cuz of non blocking 
    db.collection('cars').remove({ ownerId: { $nin: aliveOwners } })); //TODO. delete cars if owner id does not exist in aliveOwners 
}); 
+2

なぜあなたは最初に所有者の中に車の詳細を埋め込んでいないのですか?これはあなたがMongoDBを使用している理由の1つでなければならず、RDBMSのように扱うつもりなら、少しの点しかありません。あなたは今まで所有車に16MB違反するつもりはありません。あなたがジェイレノであっても、 –

答えて

0

見つける方法はaliveOwnersが定義されていない理由である非同期です。

あなたは見つかったドキュメントを受信して​​、そこにあなたのコードを継続し、コールバック関数を渡す必要があります:

db.collection('owner').find({}, function(err, aliveOwners) { 
    console.log(aliveOwners); 

    // Continue code 
}); 

注:車が唯一の所有者に属しているとして、それはとしてそれらを含めることが最善であるかもしれません所有者文書のサブ文書。

+0

私は多くの関連モデル、所有者 - >車 - >車輪があればどうですか? db.collection( 'cars')。find({}、function(err、aliveOwners){0}は、 allCars){ //継続コード //同じホイールの場合 }); }); '。それは多くのネストされたコールバックを作成します。このような状況を処理する最善の方法は何ですか?いつ私はdb接続を閉じる必要がありますか? –

+0

コールバックの代わりに約束を使用することができます。 –

関連する問題