sql >> データベース >  >> NoSQL >> MongoDB

MongodbのAggregateに関する最新情報

    フィーダークエリとしても、集約フレームワークがここで使用するのに適切な操作であるとは本当に思いません。実行しているのは、配列を個々のドキュメントとして「非正規化」することだけです。本当に必要はないはずです。代わりにドキュメントを取得してください:

    var query = {}; // whatever criteria
    
    Users.find(query,"Invitation",function(err,docs) {
        if (err) {
            console.log(err);
    
        var results = [];        
    
        async.each(docs,function(doc,callback) {
            async.each(docs.Invitation,function(invite,callback) {
                Users.findOneAndUpdate(
                    { "_id": doc._id, "Invitation._id": invite._id },
                    { "$set": { "Invitation.$.Accepted": !invite.Accepted } },
                    function(err,doc) {
                       results.push( doc );
                       callback(err);
                    }
                );
            },callback);
        },function(err) {
            if (err)
                console.log(err);
    
            console.log(results);
        });    
    
    });
    

    したがって、実行していることに対する応答でドキュメントのリストを反復処理することに問題はありません。配列メンバーも反復処理する必要があるだけです。キャッチは、あらゆる種類の .update()を発行する場合です。 知っておく必要があることを知っておく必要があります。そうすれば、非同期呼び出しが完了します。

    そのため、async.each を使用しています。 ただし、おそらくasync.eachLimit が必要です。 ループを制御します。要素の一致は、 position $> クエリ内の一致した配列要素に対応する演算子。

    これは単なるJavaScriptコードなので、値を!invite.acceptedで「切り替える」だけです。 これは逆になります。さらに楽しくするには、変更したドキュメントを からプッシュして、「results」配列を返します。 .findOneAndUpdate()



    1. <URL>へのWebSocket接続に失敗しました:WebSocketハンドシェイク中のエラー:予期しない応答コード:521

    2. MongoDB-バックアップを作成する

    3. マングースの特定のフィールドを更新するにはどうすればよいですか?

    4. MongoDBでSalatを使用するときに、compsiteキーを処理するための最良の方法は何ですか?