#mongodb #mongodb-query #aggregation-framework
#mongodb #mongodb-запрос #агрегация-фреймворк
Вопрос:
Здравствуйте, я пытаюсь присоединиться к документам в другой коллекции с
$lookup: {
from: 'operation',
localField: 'operations._id',
foreignField: '_id',
as: 'string'
}
я пробую все, но ничего не получается, я бы хотел, чтобы все операции внутри операций были связаны с идентификатором.
Комментарии:
1. Пожалуйста, отправьте образец json, к которому вы хотите присоединиться?
2. DBRef не является реальным типом. Вам нужно спуститься в него самостоятельно, используя подразделы $ref и $ id.
Ответ №1:
Вам нужно только заменить
localField: 'operations._id'
с:
localField: 'operations.$id',
Вот что я пробовал:
- Вставка некоторых операций:
db.insert.Operation([ { operationName: "test", data: [1, 2, 3], }, { operationName: "xx", data: [4, 5, 6], }, { operationName: "AA", data: [7, 8, 9], }, { operationName: "CCC", data: [10, 11, 12], }, { operationName: "PPP", data: [13, 14, 15], }, { operationName: "IIII", data: [16, 17, 18], }, ]);
- Вставив первый документ, я вызвал коллекцию
Employee
:db.insert.Employee([ { firstName: "chuck", ladtName: "Norris", enabled: true, operations: [ { $ref: "Operations", $id: ObjectId("6044ebeede8ee738e720d3a5"), }, { $ref: "Operations", $id: ObjectId("6044ebeede8ee738e720d3a6"), }, { $ref: "Operations", $id: ObjectId("6044ebeede8ee738e720d3a8"), }, { $ref: "Operations", $id: ObjectId("6044ebeede8ee738e720d3a9"), }, { $ref: "Operations", $id: ObjectId("6044ebeede8ee738e720d3aa"), }, ], }, ]);
- Я написал этот запрос:
db.Employee.aggregate([{ $lookup:{ from:"Operation", localField:"operations.$id", foreignField:"_id", as:"Result" } }])
и это все, что нужно для этого.
Вот результат:
{
"_id" : ObjectId("6044eee6de8ee738e720d3ab"),
"firstName" : "chuck",
"ladtName" : "Norris",
"enabled" : true,
"operations" : [
DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a5")),
DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a6")),
DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a8")),
DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a9")),
DBRef("Operations", ObjectId("6044ebeede8ee738e720d3aa"))
],
"Result" : [
{
"_id" : ObjectId("6044ebeede8ee738e720d3a5"),
"operationName" : "test",
"data" : [
1.0,
2.0,
3.0
]
},
{
"_id" : ObjectId("6044ebeede8ee738e720d3a6"),
"operationName" : "xx",
"data" : [
4.0,
5.0,
6.0
]
},
{
"_id" : ObjectId("6044ebeede8ee738e720d3a8"),
"operationName" : "CCC",
"data" : [
10.0,
11.0,
12.0
]
},
{
"_id" : ObjectId("6044ebeede8ee738e720d3a9"),
"operationName" : "PPP",
"data" : [
13.0,
14.0,
15.0
]
},
{
"_id" : ObjectId("6044ebeede8ee738e720d3aa"),
"operationName" : "IIII",
"data" : [
16.0,
17.0,
18.0
]
}
]
}