Size: a a a

2020 April 23

y

yopp in MongoDB Russian
🤔
лишние инструменты не тянутся в проект
Это не лишние инструменты
источник

AS

Arsen Sultanov in MongoDB Russian
yopp
У вас есть два варианта,

1) указать в pipeline в $match все условия, чтоб в результат подзапрос попадали только нужны вам документы


https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#specify-multiple-join-conditions-with-lookup

2) использовать $filter после $lookup

https://docs.mongodb.com/manual/reference/operator/aggregation/filter/
{
 from: 'service',
 let: {
   instId: '$instId'
 },
 pipeline: [
   {$match :{
     '$$instId': '33241889763'

   }}
 ],
 as: 'services'
}

подскажи пожалуйста почему переменную я не могу так использовать
источник

y

yopp in MongoDB Russian
🤔
лишние инструменты не тянутся в проект
Если очень хочется, то надёжнее использовать Atlas и их резервное копирование. Дорого, но не требует отдельных инструментов.
источник

y

yopp in MongoDB Russian
Arsen Sultanov
{
 from: 'service',
 let: {
   instId: '$instId'
 },
 pipeline: [
   {$match :{
     '$$instId': '33241889763'

   }}
 ],
 as: 'services'
}

подскажи пожалуйста почему переменную я не могу так использовать
источник

y

yopp in MongoDB Russian
Необходимо использовать let, посмотрите как в примере в этой секции показано


https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#specify-multiple-join-conditions-with-lookup
источник

AS

Arsen Sultanov in MongoDB Russian
@dd_bb в условие обернуть типа как $eq? так получается?
источник

AS

Arsen Sultanov in MongoDB Russian
yopp
Необходимо использовать let, посмотрите как в примере в этой секции показано


https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#specify-multiple-join-conditions-with-lookup
спасибо большое👍
источник

M

Mishanya in MongoDB Russian
Mishanya
Привет
Я как-то спрашивал про условие, как написать вставку или апдейт элемента, если он удовлетворяет условию, но вот с условием проблема))

Помогите, пожалуйста.

Есть такая схема:

{
  my_aggregation: [
     {
       date: date,
        type: abc, ….
      }, {}, {} ….
     ],
  ]
}

Мне нужно написать условие, что в поле my_aggregation есть ли элемент с датоой Х и типом У

if: { some_expr } ,
then: my_logic

Не могу осилить это условие)
гайз)
источник

y

yopp in MongoDB Russian
Mishanya
Привет
Я как-то спрашивал про условие, как написать вставку или апдейт элемента, если он удовлетворяет условию, но вот с условием проблема))

Помогите, пожалуйста.

Есть такая схема:

{
  my_aggregation: [
     {
       date: date,
        type: abc, ….
      }, {}, {} ….
     ],
  ]
}

Мне нужно написать условие, что в поле my_aggregation есть ли элемент с датоой Х и типом У

if: { some_expr } ,
then: my_logic

Не могу осилить это условие)
Вы хотите внутри AF условие?
источник

M

Mishanya in MongoDB Russian
yopp
Вы хотите внутри AF условие?
что такое аф ?)
источник

y

yopp in MongoDB Russian
Mishanya
что такое аф ?)
источник

M

Mishanya in MongoDB Russian
да, через аггрегейт
источник

M

Mishanya in MongoDB Russian
если есть другой вариант - я бы тоже его рассмотрел
источник

DS

Dmitriy Sinichkin in MongoDB Russian
если я ничего не путаю, то коллега хотел обновить данные с использованием af pipeline и $cond внутри. если я прав, то это делается примерно так:

db.getCollection("example_collection").updateOne(
   {"_id": ObjectId("5e9373918cba124fb1d979db")},
   [
       {$set: {
           "string": {$cond: [{$eq: ["$string", "value1"]}, "aaaa", "bbbb"]}
       }}
   ]
)
источник

DS

Dmitriy Sinichkin in MongoDB Russian
соответственно пример коллекции для которой я делал запрос выглядит так:
[{ 
   "_id" : ObjectId("5e9373918cba124fb1d979d9"),
   "string" : "value1",
   "int" : NumberInt(1),
   "float" : 11.11
},
{
   "_id" : ObjectId("5e9373918cba124fb1d979da"),
   "string" : "value2",
   "int" : NumberInt(2),
   "float" : 22.22
},
{
   "_id" : ObjectId("5e9373918cba124fb1d979db"),
   "string" : "value3",
   "int" : NumberInt(2),
   "float" : 33.33
}]
источник

M

Mishanya in MongoDB Russian
Dmitriy Sinichkin
соответственно пример коллекции для которой я делал запрос выглядит так:
[{ 
   "_id" : ObjectId("5e9373918cba124fb1d979d9"),
   "string" : "value1",
   "int" : NumberInt(1),
   "float" : 11.11
},
{
   "_id" : ObjectId("5e9373918cba124fb1d979da"),
   "string" : "value2",
   "int" : NumberInt(2),
   "float" : 22.22
},
{
   "_id" : ObjectId("5e9373918cba124fb1d979db"),
   "string" : "value3",
   "int" : NumberInt(2),
   "float" : 33.33
}]
весь этот массив это отдельное поле

и нужно найти не по 1 условию, а по двум одновременно
источник

M

Mishanya in MongoDB Russian
тобишь

есть _документ_

{
 my_filed: [
   { date: 1, type: A, something: 1 },
   { date: 1, type: b, something: 2 }
 ]
}

задача такая - у меня есть дата, тип, и something
мне нужно в массиве my_field найти элемент по дате и типу и сделать инкремент sommething

если такого элемента нет - вставить

написать условие только по дате получилось, а вот по дате и типу уже вопросики
источник

DS

Dmitriy Sinichkin in MongoDB Russian
Mishanya
весь этот массив это отдельное поле

и нужно найти не по 1 условию, а по двум одновременно
это делается элементарно через $and (или $or в зависимости от потребностей) в $cond:
db.getCollection("example_collection").updateOne(
   {"_id": ObjectId("5e9373918cba124fb1d979db")},
   [
       {$set: {
           "string": {
               $cond: [{$and: [{$eq: ["$string", "value1"]}, {$eq: ["$int", 1]}]}, "aaaa", "bbbb"]}}}
   ]
)
источник

DS

Dmitriy Sinichkin in MongoDB Russian
попробуйте доку почитать
источник

M

Mishanya in MongoDB Russian
этот код не делает то, что я описал
источник