Как получить доступ к данным из нескольких документов в коллекции с самостоятельной регистрации в ArangoDB
Я сохранил данные в ArangoDB 2.7.1 как с именем коллекции DSP:
{"content": "Book.xml", "type": "string", "name": "name", "key": 102}
{"content": "D:/XMLexample/Book.xml", "type": "string", "name": "location", "key": 102}
{"content": "xml", "type": "string", "name": "mime-type", "key": 102}
{"content": 4130, "type": "string", "name": "size", "key": 102}
{"content": "Sun Aug 25 07:53:32 2013", "type": "string", "name": "created_date", "key": 102}
{"content": "Wed Jan 23 09:14:07 2013", "type": "string", "name": "modified_date", "key": 102}
{"content": "catalog", "type": "tag", "name": "root", "key": 102}
{"content": "book", "type": "string", "name": "tag", "key": 103}
{"content": "bk101", "type": {"py/type": "__builtin__.str"}, "name": "id", "key": 103}
{"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031}
{"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031}
{"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031}
{"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031}
{"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031}
{"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031}
Здесь один набор {"content": "Book.xml", "type": "string", "name": "name", "key": 102}
представляет один документ в коллекции.
Теперь я хочу получить доступ ко всем документам с аналогичным значением key
атрибут в нескольких документах или значение заголовка и цены, где жанр компьютер "для одного и того же key
значение. Я пробовал AQL как FOR p IN DSP filter p.name == "publish_date" AND p.content == "2000-10-01" AND p.name == 'title' return p
но это возвращает пустой набор, потому что он сравнивается в одном документе, а не в коллекции.
Как и в случае с реляционной базой данных, требуется какое-то самостоятельное соединение, но я не знаю, как будет применяться само соединение. Подскажите пожалуйста, как мне получить доступ ко всем документам с одинаковым значением атрибута ключа, где publish_date
это "2000-10-01". Я ожидаю, что в результате этого запроса следующие документы, потому что соответствующие publish_date
со значением 2000-10-01 значением key
это 1031:
{"content": "Gambardella, Matthew", "type": {"py/type": "__builtin__.str"}, "name": "author", "key": 1031}
{"content": "XML Developer's Guide", "type": {"py/type": "__builtin__.str"}, "name": "title", "key": 1031}
{"content": "Computer", "type": {"py/type": "__builtin__.str"}, "name": "genre", "key": 1031}
{"content": "44.95", "type": {"py/type": "__builtin__.str"}, "name": "price", "key": 1031}
{"content": "2000-10-01", "type": {"py/type": "__builtin__.str"}, "name": "publish_date", "key": 1031}
{"content": "An in-depth look at creating applications with XML.", "type": {"py/type": "__builtin__.str"}, "name": "description", "key": 1031}
1 ответ
Предполагая, что дата публикации хранится в атрибуте name
и его значение в атрибуте content
Сначала вам нужно найти все документы с этой комбинацией:
FOR self IN DSP
FILTER self.name == 'publish_date' && self.content == '2000-10-01'
RETURN self
Теперь, когда эти документы найдены, вы можете снова объединить их с коллекцией DSP, отфильтровывая документы с одинаковыми key
значение, но исключая уже найденные документы из первоначального FOR
:
FOR self IN DSP
FILTER self.name == 'publish_date' && self.content == '2000-10-01'
FOR other IN DSP
FILTER other.key == self.key && other._key != self._key
RETURN { self, other }
Если вы всегда фильтруете по имени, содержимому и / или ключу, может быть целесообразно проиндексировать эти атрибуты. Это выглядит как key
заслуживает индекса самостоятельно. Хеш-индекс должен быть достаточным как key
всегда будет равенством. name
а также content
(в этом порядке) может быть помещен в индекс скиплиста.