मैं ArangoDB के लिए अपेक्षाकृत नया हूं, और डॉक्स के माध्यम से पढ़ने के बाद एक नई परियोजना के लिए इसे लागू करने की कोशिश कर रहा हूं।
मेरे पास दस्तावेजों का संग्रह है, और प्रत्येक मेंदस्तावेज़ एक सूची है, जिसमें कई शब्द हैं। मैं java ड्राइवर का उपयोग कर रहा हूँ, और उन दस्तावेज़ों के लिए क्वेरी करना चाहूँगा जिनकी सूची मेरे पास मौजूद सूची के किसी भी तत्व से मेल खाती है।
उदाहरण:
Document 1
{
tokens["blue", "red", "green"]
}
Document 2
{
tokens["black", "red", "yellow"]
}
myArrayList:
["purple", "red"]
ArrayList के बाद से मैं क्वेरी का उपयोग करने की कोशिश कर रहा हूं"लाल" शब्द शामिल है, मुझे दस्तावेज़ 1 और दस्तावेज़ 2 के साथ प्रस्तुत किया जाना चाहिए। आदर्श रूप से, मुझे केवल दस्तावेज़ आईडी और रंग से मेल खाता है।
AQL के बारे में मुझे जो कुछ पता है, उससे आधे-अधूरे में:
FOR document IN documents FILTER document.tokens CONTAINS myArrayList RETURN document.token.color && document._id
मैं आम तौर पर पूरे दस्तावेज़ ऑब्जेक्ट को लौटाता रहा हूं और फिर मुझे जो कुछ भी चाहिए, उस तक पहुंच रहा है। मैं कर सकता था कि अगर यह आसान है। उदाहरण के लिए:
FOR document IN documents FILTER document.tokens CONTAINS myArrayList RETURN document
उत्तर:
जवाब के लिए 3 № 1मैं इसका उपयोग करने का सुझाव देता हूं IN
निम्नानुसार फ़िल्टरिंग के लिए ऑपरेटर:
FOR document IN documents
FILTER document.tokens IN @myArrayList
RETURN document
यह केवल एक दस्तावेज़ लौटाएगा यदि tokens
विशेषता एक सरणी है और इसमें निहित किसी भी मान को समाहित किया गया है @myArrayList
बाइंड पैरामीटर।
उत्तर № 2 के लिए 1
मुझे ArangoDB Google समूह पर मेरे प्रश्न का उत्तर मिल गया है। मैं इसे लिंक कर रहा हूं क्योंकि मेरे लिए एक समाधान का पता लगाना बहुत मुश्किल था: एचttps: //groups.google.com/forum/# newtopic / arangodb / arangodb / fen4Nr7N4Uo!
मैंने अपने केस के लिए काम करने के लिए वहां के कोड को अनुकूलित कर लिया है: (मैंने जो लिखा है उसे ठीक करने के लिए क्रेडिट एसजे के लिए टिप्पणी)
FOR document IN documents LET contains =
(FOR color IN document.tokens FILTER MATCHES(color, @myArrayList) RETURN color)
FILTER LENGTH(contains) > 0 RETURN document
जवाब के लिए 0 № 3
यदि आप दस्तावेज़ ढूंढना चाहते हैं, जिसमें कम से कम सभी निर्दिष्ट रंग हों, तो किसी भी क्रम में, आप इस तरह से एक क्वेरी का उपयोग कर सकते हैं:
LET lenArrayList = LENGTH(@myArrayList)
FOR doc IN documents
FILTER HAS(doc, "tokens") // avoid bad calls to INTERSECTION()
FILTER LENGTH(INTERSECTION(@myArrayList, doc.tokens)) == lenArrayList
RETURN doc
myArrayList: ["yellow","red"]
परिणाम: दस्तावेज़ 2, क्योंकि इसमें लाल और पीले रंग शामिल हैं।