MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Извличане само на заявения елемент в масив от обекти в колекцията MongoDB

Новият $elemMatch на MongoDB 2.2 проекционният оператор предоставя друг начин за промяна на върнатия документ, за да съдържа само първия съвпадащи shapes елемент:

db.test.find(
    {"shapes.color": "red"}, 
    {_id: 0, shapes: {$elemMatch: {color: "red"}}});

Връща:

{"shapes" : [{"shape": "circle", "color": "red"}]}

В 2.2 можете също да направите това с помощта на $ projection operator , където $ в проекционен обект името на полето представлява индекса на първия съвпадащ елемент от масива на полето от заявката. Следното връща същите резултати като по-горе:

db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});

Актуализация на MongoDB 3.2

Започвайки с версия 3.2, можете да използвате новия $filter оператор за агрегиране за филтриране на масив по време на проекцията, което има предимството да включва всички съвпадения, вместо само първото.

db.test.aggregate([
    // Get just the docs that contain a shapes element where color is 'red'
    {$match: {'shapes.color': 'red'}},
    {$project: {
        shapes: {$filter: {
            input: '$shapes',
            as: 'shape',
            cond: {$eq: ['$$shape.color', 'red']}
        }},
        _id: 0
    }}
])

Резултати:

[ 
    {
        "shapes" : [ 
            {
                "shape" : "circle",
                "color" : "red"
            }
        ]
    }
]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Може ли mongo да повиши данни от масива?

  2. Как да съхранявам резултати от динамично генерирани формуляри в MongoDb?

  3. Как да изравнявам поддокумент на основно ниво в MongoDB?

  4. Разработване на база данни на Python и MongoDB

  5. java.lang.IncompatibleClassChangeError:Внедряване на клас Mongo