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

मानदंड / एकत्रीकरण:सभी पूर्ण दस्तावेज़ों की खोज करें जिनके सरणी फ़ील्ड में नवीनतम स्थिति के साथ तत्व है

आप $expr का उपयोग कर सकते हैं (3.6 मोंगो संस्करण ऑपरेटर) नियमित क्वेरी में एकत्रीकरण कार्यों का उपयोग करने के लिए।

तुलना करें query operators बनाम aggregation comparison operators

$indexOfArray . का उपयोग करें $max . खोजने के लिए ऑपरेटर स्टेटस एरे में अपडेटेड टाइमस्टैम्प एलिमेंट और उसके बाद स्टेटस वैल्यू को प्रोजेक्ट करके और इनपुट स्टेटस के खिलाफ चेक वैल्यू की तुलना।

तो शेल क्वेरी है

{
  "key":"56h68ab4c876dbe1cd0b1ee",
  "$expr":{
    "$eq":[
      {"$let":{
        "vars":{
          "status":{"$arrayElemAt":["$status",{"$indexOfArray":["$status.updatedTimeStamp",{"$max":"$status.updatedTimeStamp"}]}]}
        },
        "in":"$$status.orderStatus"
      }},
      "CONFIRM_PAYMENT"]
  }
}

स्प्रिंग कोड:

Query query = new BasicQuery("{key:'56h68ab4c876dbe1cd0b1ee','$expr':{'$eq':[{$let:{vars:{status:{'$arrayElemAt':['$status',{'$indexOfArray':['$status.updatedTimeStamp',{'$max':'$status.updatedTimeStamp'}]}]}}, in:'$$status.orderStatus'}},'CONFIRM_PAYMENT']}}");
List<Document> results = mongoTemplate.find(query, Document.class);

मोंगो 3.4 शिकायत संस्करण:

शैल क्वेरी:

db.order.aggregate([ 
  { "$match" : { "key" : "56h68ab4c876dbe1cd0b1ee"}} , 
  { "$addFields" : {
    "cmpret" : { 
      "$eq" : [ 
        { "$let" : {
          "vars" : { "status" : { "$arrayElemAt" : [ "$status" , { "$indexOfArray" : [ "$status.updatedTimeStamp" , { "$max" : "$status.updatedTimeStamp"}]}]}} ,
          "in" : "$$status.orderStatus"
        }} , 
        "CONFIRM_PAYMENT"
      ]
    }
  }} , 
  { "$match" : { "cmpret" : true}} , 
  { "$project" : { "cmpret" : 0}}
])

स्प्रिंग कोड:

  AggregationOperation match1 = Aggregation.match(Criteria.where("key").is("56h68ab4c876dbe1cd0b1ee"));
        AggregationOperation addFields = new AggregationOperation() {
            @Override
            public Document toDocument(AggregationOperationContext aggregationOperationContext) {
                Document cmpret = Document.parse("{'$eq':[{$let:{vars:{status:{'$arrayElemAt':['$status',{'$indexOfArray':['$status.updatedTimeStamp',{'$max':'$status.updatedTimeStamp'}]}]}}, in:'$$status.orderStatus'}},'CONFIRM_PAYMENT']}}");
                return new Document("$addFields", new Document("cmpret", cmpret));
            }
        };

  AggregationOperation match2 =  Aggregation.match(Criteria.where("cmpret").is(true));

   AggregationOperation dropFields = new AggregationOperation() {
            @Override
            public Document toDocument(AggregationOperationContext aggregationOperationContext) {
                return new Document("$project", new Document("cmpret", 0));
            }
        };
   Aggregation aggregation = Aggregation.newAggregation(
                match1,
                addFields,
                match2,
                dropFields
    );

   AggregationResults<Document> results = mongoTemplate.aggregate(aggregation, "order", Document.class);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. पिछले 7 दिनों के लिए दिन का अंतिम दस्तावेज़ खोजें

  2. उल्का ईमेल द्वारा अन्य उपयोगकर्ताओं से पूछताछ

  3. मोंगोडीबी $stdDevSamp

  4. डायनेमिक कुंजी को कैसे क्वेरी करें - मोंगोडब स्कीमा डिज़ाइन

  5. MongoDB दस्तावेज़ों और संग्रहों को दृष्टिगत रूप से प्रबंधित करना