Terraform - доступ к хранилищу параметров SSM

Вам нужно использовать несколько условий в сочетании с $or проверкой $size массива:

db.article.find({$or: [
  {"attributes.value": "a", "attributes": {$not: {$size: 1}}},
  {"attributes.value": {$nin: ["a"]}, "attributes": {$not: {$size: 0}}},
]})

Первый соответствует документам с attributes, у которого есть элемент {value: "a"} +, по крайней мере, 1.

Второе условие соответствует документам с непустым attributes, который не имеет элемента {value: "a"}.

Он будет соответствовать документам с любым дополнительным элементом в массиве, даже если у него нет value, например

db.article.insert({attributes: [{notvalue: 'a'}]})

, все равно будет соответствовать.

Если вам нужно сопоставить документы, где attributes имеет как минимум 1 дополнительный элемент с непустым value, другого варианта нет, но используйте $expr с выражениями агрегации:

db.article.find({ $expr: { $gt: [ 
    { $size: { $filter: { 
        input: "$attributes", 
        as: "attribute", 
        cond: { $ne: [ { $ifNull: [ "$$attribute.value", "a" ] }, "a" ]  } 
    } } },
    0
] } })    
0
задан user2992225 19 January 2019 в 17:02
поделиться