ArangoDB - Коллекция не найдена, хотя коллекция создана

Я создаю ребро «has_taken» между двумя документами следующим образом:

sin_graph.createEdge("has_taken", userDoc._id, tripDoc._id, edgeAttributes={})

И я получаю следующую ошибку:

File "/Library/Python/2.7/site-packages/pyArango/graph.py", line 135, in createEdge raise CreationError("Unable to create edge, %s" % r.json()["errorMessage"], data) CreationError: Unable to create edge, collection not found. Errors: {u'code': 404, u'errorNum': 1203, u'errorMessage': u'collection not found', u'error': True}

Коллекция с именем «has_taken» присутствует, но я получаю указанную выше ошибку.


person Aditya Borde    schedule 28.12.2016    source источник
comment
Можешь написать подробнее? откуда вы взяли sin_graph?   -  person Daniel Krom    schedule 31.12.2016
comment
Я получил свой график с помощью следующей команды sin_graph = db.graphs['Graph_name']. Я создал этот график, используя графический интерфейс arangoDB.   -  person Aditya Borde    schedule 31.12.2016
comment
Вы уверены, что используете правильную БД? а не _система›   -  person Daniel Krom    schedule 01.01.2017
comment
Да, я использовал правильную БД. Кажется, я ошибся, я читал, что граф может содержать ребра одинакового типа. На моем графике я входил в ребро, отличное от config.   -  person Aditya Borde    schedule 02.01.2017


Ответы (2)


Я думаю, это может быть потому, что вы создали коллекцию типа Collection, а не типа Edge (ха-ха, я знаю, это сбивает с толку).

Но при создании коллекции под названием «has_taken» вместо

db.createCollection(className="Collection", name="has_taken")

пытаться

db.createCollection(className="Edges", name="has_taken")

Я заметил, что когда читал это страница. (Посмотрите на самую верхнюю часть экрана, когда вы нажмете на эту ссылку. Функция и ее описание находятся прямо там, и там упоминается это отличие.)

createCollection(className='Collection', waitForSync=False, **colArgs)[source]

Создает коллекцию и возвращает ее. ClassName — имя класса, наследуемого от Collection или Egdes, для него также можно установить значение «Collection» или «Edges», чтобы создавать нетипизированные коллекции документов или ребер.

person cake    schedule 03.05.2017

Я транспилировал пример социального графа в pyArango; Он иллюстрирует последовательность действий при работе с графическими данными:

#!/usr/bin/python
import sys
from pyArango.connection import *
from pyArango.graph import *
from pyArango.collection import *


class Social(object):
        class male(Collection) :
            _fields = {
                "name" : Field()
            }

        class female(Collection) :
            _fields = {
                "name" : Field()
            }

        class relation(Edges) :
            _fields = {
                "number" : Field()
            }

        class social(Graph) :

            _edgeDefinitions = (EdgeDefinition ('relation',
                                                fromCollections = ["female", "male"],
                                                toCollections = ["female", "male"]),)
            _orphanedCollections = []


        def __init__(self):
               self.conn = Connection(username="root", password="")

               self.db = self.conn["_system"]
               if self.db.hasGraph('social'):
                   raise Exception("The social graph was already provisioned! remove it first")

               self.female   = self.db.createCollection("female")
               self.male     = self.db.createCollection("male")

               self.relation = self.db.createCollection("relation")

               g = self.db.createGraph("social")

               a = g.createVertex('female', {"name": 'Alice',  "_key": 'alice'});
               b = g.createVertex('male',  {"name": 'Bob',    "_key": 'bob'});
               c = g.createVertex('male',   {"name": 'Charly', "_key": 'charly'});
               d = g.createVertex('female', {"name": 'Diana',  "_key": 'diana'});
               a.save()
               b.save()
               c.save()
               d.save()

               g.link('relation', a, b, {"type": 'married', "_key": 'aliceAndBob'})
               g.link('relation', a, c, {"type": 'friend', "_key": 'aliceAndCharly'})
               g.link('relation', c, d, {"type": 'married', "_key": 'charlyAndDiana'})
               g.link('relation', b, d, {"type": 'friend', "_key": 'bobAndDiana'})


Social()
person dothebart    schedule 31.03.2017