mongoose 経由でアイテムを mongo 配列にプッシュする 質問する

mongoose 経由でアイテムを mongo 配列にプッシュする 質問する

基本的に、スキーマが次のとおりである「people」という MongoDB コレクションがあります。

people: {
         name: String, 
         friends: [{firstName: String, lastName: String}]
        }

これで、データベースに接続し、空の friends 配列を持つ「people」を正常に作成する、非常に基本的な Express アプリケーションができました。

アプリケーションの 2 番目の場所には、友達を追加するためのフォームがあります。フォームは firstName と lastName を受け取り、適切な people オブジェクトを参照するために、name フィールドも POST します。

私が苦労しているのは、新しい友達オブジェクトを作成し、それを友達配列に「プッシュ」することです。

mongo コンソール経由でこれを行う場合、検索条件の後の 2 番目の引数として更新関数を使用することはわかっています$pushが、mongoose でこれを実行するための適切な方法が見つからないようです。

db.people.update({name: "John"}, {$push: {friends: {firstName: "Harry", lastName: "Potter"}}});

ベストアンサー1

仮定すると、var friend = { firstName: 'Harry', lastName: 'Potter' };

次の 2 つのオプションがあります。

メモリ内のモデルを更新し、保存します (プレーンな JavaScript array.push):

person.friends.push(friend);
person.save(done);

または

PersonModel.update(
    { _id: person._id }, 
    { $push: { friends: friend } },
    done
);

私は、可能であれば常に最初のオプションを選択するようにしています。これは、mongoose が提供する利点 (フック、検証など) をより多く活用できるためです。

ただし、同時書き込みを大量に行うと、競合状態に陥り、毎回モデル全体を置き換えることができなくなり、以前に追加したフレンドが失われるという厄介なバージョン エラーが発生します。そのため、後者は絶対に必要な場合にのみ使用してください。

おすすめ記事