MongoTemplate क्वेरी सरणी है कि मैच में कम से कम मानों मैं गुजर रहा हूँ

0

सवाल

अगर मैं एक दस्तावेज के रूप में परिभाषित किया

[
  {
    "title": "title",
    "tags": [ "cool", "amazing", "funny" ]
  },
  {
    "title": "another title",
    "tags": [ "nice", "amazing", "funny" ]
  }
]

मैं करना चाहते हैं के लिए सक्षम होना करने के लिए क्वेरी के साथ MongoTemplate पारित करने के क्रम में मानों की एक सूची की तरह ["शांत","अद्भुत"] और बदले में पहले संग्रह से ऊपर, दूसरा नहीं. के लिए मैं क्या मतलब है को प्राप्त करने में$ हालत नहीं लगता है पर्याप्त. मैं के साथ की कोशिश की $सभी की हालत और मोंगो कंसोल यह काम करता है के रूप में मैं की जरूरत है, लेकिन मेरे कोड में कुछ काम नहीं कर रहा है और यह हमेशा के लिए लेता है के लिए क्वेरी करने के लिए विस्तृत है । के साथ $में ऑपरेटर अपने कोड तेजी से चला जाता है के बजाय । मेरे विधि में भंडार (अन्य कारणों के लिए, मैं क्या करने के लिए एक एकत्रीकरण नीचे के रूप में):

public Page<MyDocument> findByProperties(String title, List<ObjectId> tags, Pageable page) {
        final List<Criteria> criteria = new ArrayList<>();
        Aggregation aggregation = null;

        
        if (title != null && !title.isEmpty()) {
            criteria.add(Criteria.where("title").is(title));
        }
        
        if (tags != null && !tags.isEmpty()) {
            criteria.add(Criteria.where("MyBook.tags").all(tags));
        }

        if (!criteria.isEmpty()) {
            aggregation = Aggregation.newAggregation(
                    Aggregation.lookup("from_collection", "_id", "idParent", "MyBook"),
                    Aggregation.unwind("MyBook"),
                    Aggregation.match(new Criteria().andOperator(criteria.toArray(new Criteria[0]))),
                    Aggregation.skip(page.getOffset()),
                    Aggregation.limit(page.getPageSize()),
                    Aggregation.sort(page.getSort())
            );
        } else {
            aggregation = Aggregation.newAggregation(
                    Aggregation.lookup("from_collection", "_id", "idParent", "MyBook"),
                    Aggregation.unwind("MyBook"),
                    Aggregation.skip(page.getOffset()),
                    Aggregation.limit(page.getPageSize()),
                    Aggregation.sort(page.getSort())
            );
        }

        List<MyDocument>  results  = mongoTemplate.aggregate(aggregation, "my_document", MyDocument.class).getMappedResults();

        return PageableExecutionUtils.getPage(results, page,
                () -> (long)results.size());
    } 

देख यह जवाब है, मैं के साथ की कोशिश की

criteria.add(Criteria.where("MyBook.tags").in(tags).all(tags));

लेकिन कुछ भी नहीं बदला है, क्वेरी लेता है हमेशा के लिए नहीं है और उम्मीद उत्पादन के. किसी भी विचार है, कृपया? धन्यवाद!

1

सबसे अच्छा जवाब

0

खोजने के लिए यदि टैग सरणी क्षेत्र में शामिल सभी सदस्यों के अपने सरणी के साथ, अपने का उपयोग कर सकते हैं bellow, अगर आप की जरूरत है यह में होना करने के लिए एकत्रीकरण पाइप लाइन का उपयोग करें ।

अपने प्रश्न में आप अधिक चरणों, और अधिक कोड, यदि आप पूछना चाहते हैं, तो आप और अधिक दे सकते हैं, उदाहरण डेटा और उम्मीद उत्पादन में JSON, और क्या आप क्या करना चाहते हैं, तो लोगों की मदद कर सकते हैं.

Query1

  • मिल का उपयोग कर $all ऑपरेटर

परीक्षण कोड यहाँ

db.collection.find({"tags": {"$all": ["cool","amazing"]}})

Query2

  • एकत्रीकरण समाधान के साथ सेट अंतर

परीक्षण कोड यहाँ

aggregate(
[{"$match": 
    {"$expr": 
      {"$eq": [{"$setDifference": [["cool", "amazing"], "$tags"]}, []]}}}])
2021-11-23 17:19:23

हाय Takis के लिए धन्यवाद, अपने सुझाव! क्या मैं की जरूरत है यह करने के लिए जावा के साथ, नहीं के माध्यम से मोंगो कंसोल, जहां यह पहले से ही काम करता है. के साथ MongoTemplate मैं का उपयोग करने के लिए एक प्रक्षेपण है, और मेरे मामले में मैं नहीं बल्कि के साथ छड़ी के एकत्रीकरण. के लिए कोड उदाहरण में, मैं बस करने के लिए की जरूरत में शामिल होने के दो संग्रह (एकत्रीकरण) और क्वेरी पर एक सरणी में मौजूद "MyBook" का संग्रह है जो मैं में शामिल हो
Barbi

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में