sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan filtreres array i underdokument med MongoDB

Brug af aggregate er den rigtige tilgang, men du skal $unwind list array, før du anvender $match så du kan filtrere individuelle elementer og derefter bruge $group for at sætte det sammen igen:

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

udgange:

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

MongoDB 3.2-opdatering

Fra og med 3.2-udgivelsen kan du bruge det nye $filter aggregeringsoperatør for at gøre dette mere effektivt ved kun at inkludere list elementer, du ønsker under et $project :

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


  1. Hvad er forskellen mellem sharding og replikering i Mongo?

  2. oprettelse af registrerings- og loginformular i node.js og mongodb

  3. Brug af Hive til at interagere med HBase, del 1

  4. Udførelse af regex-forespørgsler med PyMongo