MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडब में चैट वार्तालाप से अंतिम संदेश कैसे प्राप्त करें

समस्या यह है कि संदेशों को stored . कैसे किया जाता है ।

डेटा संग्रहीत:

fromUser 123 and toUser 456
fromUser 456 and toUser 123

इसलिए, जब आप इसे समूहबद्ध करते हैं, तो तार्किक रूप से वे समान होते हैं , लेकिन not for grouping

समाधान:

हमें यह सुनिश्चित करने की आवश्यकता है कि प्रेषक / प्राप्तकर्ता हमेशा एक ही तरह से आए

1. Create array where we store sender / receiver
2. Order that array `[123, 456] [456, 123] => [123,456], [123,456]`
3. Group by this ordered array (In Mongo way: $project, $unwind, $sort, $group - push)
db.chats.aggregate([
  {
    $match: {
      $or: [
        {
          "toUser": 123
        },
        {
          "fromUser": 123
        }
      ]
    }
  },
  {
    "$project": {
      toUser: 1,
      fromUser: 1,
      message: 1,
      timeStamp: 1,
      fromToUser: [
        "$fromUser",
        "$toUser"
      ]
    }
  },
  {
    $unwind: "$fromToUser"
  },
  {
    $sort: {
      "fromToUser": 1
    }
  },
  {
    $group: {
      _id: "$_id",
      "fromToUser": {
        $push: "$fromToUser"
      },
      "fromUser": {
        "$first": "$fromUser"
      },
      "toUser": {
        "$first": "$toUser"
      },
      "message": {
        "$first": "$message"
      },
      "timeStamp": {
        "$first": "$timeStamp"
      }
    }
  },
  {
    "$sort": {
      "timeStamp": -1
    }
  },
  {
    "$group": {
      "_id": "$fromToUser",
      "fromUser": {
        "$first": "$fromUser"
      },
      "toUser": {
        "$first": "$toUser"
      },
      "message": {
        "$first": "$message"
      },
      "timeStamp": {
        "$first": "$timeStamp"
      }
    }
  }
])

परिणाम

[
  {
    "_id": [
      101,
      123
    ],
    "fromUser": 123,
    "message": "Kk",
    "timeStamp": "2019-10-09 18:31:12:1212 PM +05:30",
    "toUser": 101
  },
  {
    "_id": [
      123,
      456
    ],
    "fromUser": 123,
    "message": "2",
    "timeStamp": "2019-10-09 18:31:21:2121 PM +05:30",
    "toUser": 456
  }
]

MongoPlayground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. उल्का:विभिन्न उपयोगकर्ताओं के लिए अद्वितीय MongoDB URL

  2. MongoDB गणना () बनाम एकत्रीकरण

  3. मैं pymongo.cursor.Cursor ऑब्जेक्ट को कैसे पुनः प्राप्त और प्रिंट कर सकता हूँ?

  4. MongoDB क्वेरी परिणाम आदेश (संख्यात्मक श्रेणी क्वेरी)

  5. मोंगोडब - सी # ड्राइवर के साथ कुछ तत्वों को शामिल या बहिष्कृत करें