b.getCollection('actions').aggregate([
{ $lookup : {
from: "companies",
localField: "company.$id",
foreignField: "companies:_id",
as: "companyId"
}
}
])
Сообщение об ошибке: fieldpath field names cannot start with $.
Я не могу переименовать поле, это производственный сайт, и если я не могу выполнить простое СОЕДИНЕНИЕ, я возвращаюсь к SQL.
b.getCollection('actions').aggregate([
{ $lookup : {
from: "companies",
localField: "company.$id",
foreignField: "companies:_id",
as: "companyId"
}
}
])
Я унаследовал эту схему: так что да, это возможно, может быть, мне следует перенести и переименовать? «компания»: { «$ref»: «компании», «$id»: ObjectId («55438646d4c64aa2a9d84902»)},

у вас есть синтаксические ошибки в вашем "JOINT", это должно выглядеть так
b.getCollection('actions').aggregate([
{
$lookup : {
from: "companies",
localField: "_id",
foreignField: "companies._id",
as: "companyId"
}
}
])
- Я предполагаю, что так выглядит ваша схема, я не могу знать, пока вы не поделитесь ею.
Спасибо за ответ, я скоро попробую ваше решение
не работает, и, похоже, проблема исходит из БД: ниже я скопировал пример множества записей, выглядящих так, с $id и $ref "company": { "$ref" : "companies", "$ id" : ObjectId("55438646d4c64aa2a9d84902") },
DBrefs будет иметь поля, начинающиеся с '$', поэтому напрямую мы не можем использовать $ поиск в DBrefs.
используя $objectToArray, можно использовать $lookup ( $objectToArray поддерживается начиная с версия 3.4.4 и выше)
db.getCollection('actions').aggregate([
{
$project:
{
companiesArray: { $objectToArray: "$company" }
}
},
{
$unwind: "$companiesArray"
},
{
$match: {"companiesArray.k" :"$id"}
},
{ $lookup : {
from: "companies",
localField: "companiesArray.v",
foreignField: "_id",
as: "companyId"
}
}
])
Большое спасибо за ваш комментарий, сэр, я попробую прямо сейчас
хороший хак, есть ли какой-нибудь более чистый способ сделать это?
mongoDb не позволяет вставлять поля, начинающиеся с «$»