Почему поле «connectFromField» в $ graphLookup не принимает массив?

#mongodb

#mongodb

Вопрос:

connectFromField $graphLookup документально подтверждено, что оно принимает массив: https://docs.mongodb.com/manual/reference/operator/aggregation/graphLookup /

Имя поля, значение которого $ graphLookup использует для рекурсивного сопоставления с connectToField других документов в коллекции. Если значение представляет собой массив, каждый элемент проходит через процесс обхода индивидуально.

Но в каждой версии MongoDB, которую я пробовал, он терпит неудачу с этой ошибкой при предоставлении массива строк:

 Error:
Uncaught exception: Error: command failed: {
    "ok" : 0,
    "errmsg" : "expected string as argument for connectFromField, found: [ "name", "id" ]",
    "code" : 40103,
    "codeName" : "Location40103"
} : aggregate failed :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:18:14
_assertCommandWorked@src/mongo/shell/assert.js:583:17
assert.commandWorked@src/mongo/shell/assert.js:673:16
DB.prototype._runAggregate@src/mongo/shell/db.js:266:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1012:12
DBCollection.prototype.aggregate@:1:355
@(shell):1:1
  

Пример запроса:

 db.getCollection('sensor_data').aggregate([{$graphLookup: {
    from: 'sensor_data',
    startWith: 'name',
    connectFromField: ['name', 'id'],
    connectToField: 'value',
    as: 'children'
}}])
  

Я делаю что-то не так или connectFromField значение просто не принимает массив?

Комментарии:

1. В вашем примере показано, что массиву присваивается значение connectFromField not connectToField . ?

2. @BuzzMoschetti Да, извините, я перепутал вопрос. Должно быть connectFromField , что должно принимать массивы, но это не так.

Ответ №1:

`Значение», на которое ссылаются, — это значение для указанного поля в просматриваемых документах. Вы не можете указать несколько имен полей.