sql >> Database >  >> NoSQL >> MongoDB

mongoDB-query voor ophalen uit geneste arrayverzameling

Je hebt $elemMatch nodig en aggregeren .

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"
        }
    }
])

Dus de query zal die stappen uitvoeren:

  1. $unwind alle Sessions elementen
  2. $match documenten binnen het datumbereik
  3. $group documenten samen door _id , First_Name , Last_Name
  4. $project documenten eruitzien als het originele formaat

Ik heb enkele velden weggelaten, maar je kunt ze gemakkelijk toevoegen in $group en $project stappen. En natuurlijk moet je de periode wijzigen.

Ik maak me zorgen over de prestaties van deze query in een grote verzameling. Misschien is het beter als je de eerste vraag gebruikt die ik heb gegeven en de gewenste sessies in je code filtert.

Bewerken:

Zoals @chridam al zei, werkt deze query alleen als je Last_Login wijzigt naar ISODate() , wat wordt aanbevolen.

Bewerken 2:

De zoekopdracht bijwerken om aggregate te gebruiken en overeenkomen met het verzoek van alleen ophalen van Sessions binnen het datumbereik.

Dit is de oude versie:

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



  1. Afbeelding wordt niet weergegeven vanuit het dynamische afbeeldingspad tijdens het gebruik van een express html-pdf-pakket

  2. Hoe typecontrole afdwingen voor een documentwaarde in MongoDB?

  3. Berichten verzenden naar groepen in Django Channels 2

  4. Maak _id op subdocumenten op mongoimport --jsonArray