sql >> Databáze >  >> NoSQL >> MongoDB

Jak filtrovat pole ve vnořeném dokumentu s MongoDB

Pomocí aggregate je správný přístup, ale musíte $unwind list pole před použitím $match abyste mohli filtrovat jednotlivé prvky a poté použít $group abych to dal dohromady:

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $unwind: '$list'},
    { $match: {'list.a': {$gt: 3}}},
    { $group: {_id: '$_id', list: {$push: '$list.a'}}}
])

výstupy:

{
  "result": [
    {
      "_id": ObjectId("512e28984815cbfcb21646a7"),
      "list": [
        4,
        5
      ]
    }
  ],
  "ok": 1
}

Aktualizace MongoDB 3.2

Počínaje verzí 3.2 můžete používat nový $filter agregačního operátora, aby to bylo možné efektivněji provést pouze zahrnutím list prvky, které chcete během $project :

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $project: {
        list: {$filter: {
            input: '$list',
            as: 'item',
            cond: {$gt: ['$$item.a', 3]}
        }}
    }}
])


  1. Jak provedu dotazy na Mongodb bez ohledu na velikost písmen?

  2. Získání časového razítka z mongodb id

  3. Spouštění Mongo like Query (JSON) prostřednictvím Javy

  4. Jaké jsou základní rozdíly mezi select, epoll, kqueue a evport?