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

Mongodbは集約フレームワークで最後の組み合わせを取得します

    ここで必要なのは、「送信者と受信者」の組み合わせごとに生成される「一意のキー」値です。これを定期的に実行したい場合は、値をドキュメントに保存することをお勧めします。ただし、これは、集計フレームワークを使用して問題を解決する方法です。

     db.messages.aggregate([
        { "$project": {
           "combined": { "$map": {
               "input": { "$literal": ["A","B"] },
               "as": "bin",
               "in": { "$cond": [ 
                   { "$eq": [ "$$bin", "A" ] },
                   "$sender",
                   "$recipient"
               ]}
           }},
           "doc": "$$ROOT"
        }},
        { "$unwind": "$combined" },
        { "$sort": { "_id": 1, "combined": 1, "doc.date": -1 } },
        { "$group": {
            "_id": "$_id",
            "combined": { "$push": "$combined" },
            "doc": { "$first": "$doc" }
        }},
        { "$group": {
            "_id": "$combined",
            "doc": { "$first": "$doc" }
        }}
    ])
    

    これにより、サンプルが「送信者/受信者」の「一意の」3つの組み合わせに絞り込まれ、その「ペア」間の会話の最後のドキュメントが返されます。

    {
        "_id" : [
                "52f37fbaf9cd0e02773c97b1",
                "53172480f9cd0e682840b9f7"
        ],
        "doc" : {
                "_id" : "54b4cec9f6a48ce34f8b6429",
                "date" : NumberLong(1421135561),
                "sender" : "53172480f9cd0e682840b9f7",
                "recipient" : "52f37fbaf9cd0e02773c97b1",
                "isRead" : false,
                "text" : "Hello 2!"
        }
    }
    {
        "_id" : [
                "52f37fbaf9cd0e02773c97b1",
                "53072122f9cd0ee76306dc5a"
        ],
        "doc" : {
                "_id" : "54b4cf02f6a48ce54f8b62f9",
                "date" : NumberLong(1421135618),
                "sender" : "53072122f9cd0ee76306dc5a",
                "recipient" : "52f37fbaf9cd0e02773c97b1",
                "isRead" : false,
                "text" : "Hello 3!"
        }
    }
    {
        "_id" : [
                "52ea178ff9cd0e9f24d776b4",
                "52f37fbaf9cd0e02773c97b1"
        ],
        "doc" : {
                "_id" : "54b4d249f6a48ce54f8b6b9f",
                "date" : NumberLong(1421136457),
                "sender" : "52f37fbaf9cd0e02773c97b1",
                "recipient" : "52ea178ff9cd0e9f24d776b4",
                "isRead" : false,
                "text" : "Hello 4!"
        }
    }
    



    1. マングースの個体数とオブジェクトのネスト

    2. MongoDBは、ベース1からの結合コレクションフィールドに追加します

    3. 複数のノードとsocket.io-redisを持つsocket.ioでソケットが生きている(接続されている)ことを確認する方法

    4. ブール値をmongoDBで切り替えます