Работая с mongolite v0.9.1 (R) и MongoDB v3.4, я хотел бы объединить две коллекции: первая - родительская, содержащая ObjectId, вторая - дочерние, содержащие строковое значение родительского ObjectId.
Это основной синтаксис:
conParent$aggregate('[
{ "$lookup":
{ "from":"Children",
"localField": "_id",
"foreignField": "parent_id",
"as": "children"
}
}
]')
$ lookup, похоже, принимает только имя поля, я пробовал это, создавая синтаксические ошибки:
.../...
"foreignField": "{'$oid':'parent_id'}"
.../...
Как с этим справиться?
Другим способом я безуспешно пытался сохранить родительский ObjectId в дочерних элементах в формате ObjectId (я все еще получаю строку в MongoDB):
result <- transform(
computeFunction,
parent_id = sprintf('{"$oid":"%s"}',parent$"_id"))
resultCon <- conout$insert(as.data.frame(result))
Можно ли сохранить идентификатор как ObjectId в монголите?
Примечание. Я выполняю массовые вставки, поэтому не могу справиться с манипуляциями со строками JSON.
Любая идея ?
Редактировать:
Вот пример коллекций, которые я использую:
Родительская коллекция:
{
"_id" : ObjectId("586f7e8b837abeabb778d2fd"),
"name" : "Root1",
"date" : "2017-01-01",
"value" : 1.0,
"value1" : 10.0,
"value2" : 100.0
},
{
"_id" : ObjectId("586f7ea4837abeabb778d30a"),
"name" : "Root1",
"date" : "2017-01-02",
"value" : 2.0,
"value1" : 20.0,
"value2" : 200.0
}
Коллекция Children:
{
"_id" : ObjectId("586f7edf837abeabb778d319"),
"name" : "Item1",
"value" : 1.1,
"date" : "2017-01-01",
"parent_id" : "586f7e8b837abeabb778d2fd"
}
{
"_id" : ObjectId("586f7efa837abeabb778d324"),
"name" : "Item2",
"value1" : 11.111111111,
"value2" : 12.222222222,
"date" : "2017-01-01",
"parent_id" : "586f7e8b837abeabb778d2fd"
}
{
"_id" : ObjectId("586f7f15837abeabb778d328"),
"name" : "Item1",
"value" : 2.2,
"date" : "2017-01-02",
"parent_id" : "586f7ea4837abeabb778d30a"
}
{
"_id" : ObjectId("586f7f2b837abeabb778d32e"),
"name" : "Item2",
"value1" : 21.111111111,
"value2" : 22.222222222,
"date" : "2017-01-02",
"parent_id" : "586f7ea4837abeabb778d30a"
}