pu sh при условии в массив - PullRequest
0 голосов
/ 27 января 2020

Нам нужно нажимать / добавлять только в том случае, если ключ в документе ne []
Как этого добиться

{
    "_id" : ObjectId("xxxxxx"),
    "shop" : "REQ4",
    "bolt" : "5647",
    "nut" : "1111",
}
{
    "_id" : ObjectId("xxxxxx"),
    "shop" : "REQ4",
    "bolt" : "2314",
    "nut":[]
}
Aggregates.group("$shop", Accumulators.addToSet("bolt", "$bolt"),Accumulators.addToSet("nut", "nut"))//only if nut ne []

Ожидаемый результат:

{ "_id" : "REQ4", "bolt" : ["5647", "2314"], "nut" : ["1111"]

1 Ответ

1 голос
/ 27 января 2020

Вы можете сначала $push, затем можете использовать $filter, чтобы исключить []

db.collection.aggregate([
  { "$group": {
    "_id": "$shop",
    "bolt": { "$push": "$bolt" },
    "nut": { "$push": "$nut" }
  }},
  { "$addFields": {
    "nut": {
      "$filter": {
        "input": "$nut",
        "cond": { "$ne": ["$$this", []] }
      }
    }
  }}
])
...