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

मोंगोडब एकत्रीकरण में लुकअप

चूंकि आपके पास नेस्टेड सरणियाँ हैं, इसलिए आपको $unwind . लागू करने की आवश्यकता है $lookup . का उपयोग करने से पहले एम्बेडेड दस्तावेज़ों को सामान्य बनाने के लिए पहले ऑपरेटर पाइपलाइन (जब तक कि आपने उन्हें अपने एकत्रीकरण ऑपरेशन में पहले ही समतल नहीं कर दिया है):

db.personaddress.aggregate([
    { "$unwind": "$address" },
    { "$unwind": "$address.location" },
    {
        "$lookup": {
            "from": "places", 
            "localField": "address.location.place._id", 
            "foreignField": "_id", 
            "as": "address.location.place", 
        }
    }
])

जिसे तब (अनचाहे) के रूप में लागू किया जा सकता है:

LookupOperation lookupOperation = LookupOperation.newLookup()
    .from("places")
    .localField("address.location.place._id")
    .foreignField("_id")
    .as("address.location.place");

Aggregation agg = newAggregation(
    unwind("address"),
    unwind("address.location"),
    lookupOperation  
);

AggregationResults<OutputDocument> aggResults = mongoTemplate.aggregate(
    agg, PersonAddressDocument.class, OutputDocument.class
);

यदि आपका स्प्रिंग डेटा संस्करण इसका समर्थन नहीं करता है, तो एग्रीगेशनऑपरेशन को लागू करने का समाधान है DBObject में लेने के लिए इंटरफ़ेस :

public class CustomGroupOperation implements AggregationOperation {
    private DBObject operation;

    public CustomGroupOperation (DBObject operation) {
        this.operation = operation;
    }

    @Override
    public DBObject toDBObject(AggregationOperationContext context) {
        return context.getMappedObject(operation);
    }
}

फिर $lookup . लागू करें एकत्रीकरण पाइपलाइन में DBObject के रूप में संचालन:

DBObject lookupOperation = (DBObject)new BasicDBObject(
    "$lookup", new BasicDBObject("from", "places")
        .append("localField", "address.location.place._id")
        .append("foreignField", "_id")
        .append("as", "address.location.place")       
);

जिसे आप तब उपयोग कर सकते हैं:

Aggregation agg = newAggregation(
    unwind("address"),
    unwind("address.location"),
    lookupOperation  
);

AggregationResults<OutputDocument> aggResults = mongoTemplate.aggregate(
    agg, PersonAddressDocument.class, OutputDocument.class
);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose में एक और स्कीमा का संदर्भ देना

  2. SQL में किसी संख्या को मुद्रा के रूप में प्रारूपित करें

  3. यदि मौजूद है तो कैसे अपडेट करें अन्यथा नया दस्तावेज़ डालें?

  4. गलत URI के कारण MongoDB से कनेक्ट नहीं हो सकता

  5. मोंगोडीबी $नमूना दर