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

बहु-स्तरीय ऑब्जेक्ट मानों के आधार पर नेस्टेड सरणी को फ़िल्टर करें और उन्हें अपडेट करें - MongoDB एग्रीगेट + अपडेट

मैंने एग्रीगेशन क्वेरी लिखी है

        db.session.aggregate([
          {
            $unwind:"$Sessions"
          },
          {
            $unwind:"$Sessions.Conversations"
          },
          {
            $unwind:"$Sessions.Conversations.Messages"
          },
          {
            $match:{
              "Sessions.Id" : "Session01",
              "Sessions.Conversations.Messages.Direction":{
                $in:[
                  "inbound", "outbound"
                ]
              },
              "Sessions.Conversations.Messages.Status":{
                $in:[
                  "sent", "delivered" 
                ]
              }
            }
          },
          {
            $group:{
              "_id":"$Sessions.Conversations.Id",
              "Messages":{
                $push:"$Sessions.Conversations.Messages"
              }
            }
          }
        ]).pretty()

आउटपुट

        {
                "_id" : "Conversation02",
                "Messages" : [
                        {
                                "Id" : "Message05",
                                "Status" : "sent",
                                "Direction" : "outbound"
                        }
                ]
        }
        {
                "_id" : "Conversation01",
                "Messages" : [
                        {
                                "Id" : "Message03",
                                "Status" : "delivered",
                                "Direction" : "inbound"
                        },
                        {
                                "Id" : "Message04",
                                "Status" : "sent",
                                "Direction" : "outbound"
                        }
                ]
        }

अब दस्तावेज़ को अपडेट करने के लिए:

मैंने positional-filters का उपयोग किया है

        db.session.update(
          {},
          {
            $set:{
              "Sessions.$[session].Conversations.$[].Messages.$[message].Status":"read"
            }
          },
          {
            "arrayFilters": [{"session.Id":"Session01"},{ "message.Id": "Message05" }] 
          }
        )

यह स्थिति को read . के रूप में अपडेट करेगा "session.Id":"Session01" . के लिए और "message.Id": "Message05"

आशा है कि यह आपकी मदद करेगा। :)

अपडेट करें

        db.session.update(
          {},
          {
            $set:{
              "Sessions.$[session].Conversations.$[].Messages.$[message].Status":"read"
            }
          },
          {
            "arrayFilters": [
              {
                "session.Id":"Session01"
              },
              { 
                "message.Direction": {
                  $in :[
                    "inbound", 
                    "outbound"
                  ]
                },
                "message.Status": {
                  $in :[
                    "sent", 
                    "delivered"
                  ]
                }
              }
            ] 
          }
        )



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला में सरणी से डेटा कैसे प्राप्त करें?

  2. MongoDB:उपयोगकर्ताओं को टिप्पणियों में एम्बेड करें

  3. नेवला के साथ दस्तावेज़ों को अद्यतन और सहेजने के तरीके बनाना?

  4. स्प्रिंग मोंगो में नेस्टेड दस्तावेज़ के रूप में प्रोजेक्ट करें

  5. लुकअप से अंतिम दस्तावेज़ लौटाएं