$lookup не работает с полем, начинающимся с $

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"
            }
     }
])

mongoDb не позволяет вставлять поля, начинающиеся с «$»

cnsnaveen 15.05.2019 15:20

Я унаследовал эту схему: так что да, это возможно, может быть, мне следует перенести и переименовать? «компания»: { «$ref»: «компании», «$id»: ObjectId («55438646d4c64aa2a9d84902»)},

Vincent Vega 16.05.2019 11:20
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
2
232
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

у вас есть синтаксические ошибки в вашем "JOINT", это должно выглядеть так

b.getCollection('actions').aggregate([
     {
        $lookup : {
           from: "companies",
           localField: "_id",
           foreignField: "companies._id",
           as: "companyId"
          }
     }
])

- Я предполагаю, что так выглядит ваша схема, я не могу знать, пока вы не поделитесь ею.

Спасибо за ответ, я скоро попробую ваше решение

Vincent Vega 16.05.2019 09:28

не работает, и, похоже, проблема исходит из БД: ниже я скопировал пример множества записей, выглядящих так, с $id и $ref "company": { "$ref" : "companies", "$ id" : ObjectId("55438646d4c64aa2a9d84902") },

Vincent Vega 16.05.2019 11:23
Ответ принят как подходящий

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"
       }
}
])

Большое спасибо за ваш комментарий, сэр, я попробую прямо сейчас

Vincent Vega 20.05.2019 13:05

хороший хак, есть ли какой-нибудь более чистый способ сделать это?

RichieK 14.10.2019 12:39

Другие вопросы по теме