#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
notconnectToField
. ?2. @BuzzMoschetti Да, извините, я перепутал вопрос. Должно быть
connectFromField
, что должно принимать массивы, но это не так.
Ответ №1:
`Значение», на которое ссылаются, — это значение для указанного поля в просматриваемых документах. Вы не можете указать несколько имен полей.