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

mongoDB заявка за извличане от колекция от вложени масиви

Ще ви трябва $elemMatch и обобщаване .

db.users.aggregate([
    {
        $unwind: "$Sessions"
    },
    {
        $match: {
            "Sessions.Last_Login": {
                $gte: ISODate("2016-06-16T00:00:00.0Z"),
                $lt: ISODate("2016-06-17T00:00:00.0Z")
            }
        }
    },
    {
        $group: {
            _id: {
                _id: "$_id",
                First_Name: "$First_Name",
                Last_Name: "$Last_Name"
            },
            Sessions: {
                $push: "$Sessions"
            }
        }
    },
    {
        $project: {
            _id: "$_id._id",
            First_Name: "$_id.First_Name",
            Last_Name: "$_id.Last_Name",
            Sessions: "$Sessions"
        }
    }
])

Така че заявката ще изпълни тези стъпки:

  1. $unwind всички Sessions елементи
  2. $match документи в рамките на периода от време
  3. $group заедно документи по _id , First_Name , Last_Name
  4. $project документите да изглеждат като оригиналния формат

Пропуснах някои полета, но можете лесно да ги добавите в $group и $project стъпки. И разбира се, ще трябва да промените периода от време.

Загрижен съм за ефективността на тази заявка в голяма колекция. Може би е по-добре, ако използвате първата заявка, която дадох, и филтрирате сесиите, които искате в кода си.

Редактиране:

Както каза @chridam, тази заявка ще работи само ако промените Last_Login към ISODate() , какво се препоръчва.

Редактиране 2:

Актуализиране на заявката за използване на aggregate и съответства на заявката само за извличане на Sessions вътре в диапазона от дати.

Това е старата версия:

db.users.filter({
    'Sessions': {
        '$elemMatch': {
            'Last_Login': {
                '$gte': ISODate("2016-06-16T00:00:00.0Z"),
                '$lt': ISODate("2016-06-17T00:00:00.0Z")
            }
        }
    }
})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb създава псевдоним в заявка

  2. MongoDB Change Stream:Мога ли да получа стойност преди актуализиране/изтриване?

  3. Как се свързвате с репликасет от обвивка на MongoDB?

  4. Схема за дата Mongoose

  5. Монго в тестови контейнери