sql >> Databasteknik >  >> NoSQL >> MongoDB

$elemMatch med distinkt

Gissar tests.device_serial är en array, här är ditt misstag :

 db.sessions.distinct("tests.device_serial", {"tests.device_serial" : {$ne: ""}})

Frågan i ditt distinkta kommando är att filtrera dokument där arrayen "test" innehåller ett fält med namnet device_serial med värdet "", och inte bara fälten i array.

För att uppnå vad du vill kan du använda aggregeringsramverk, varva ner array till flera dokument, filtrera och gruppera efter null med ett $addToSet-kommando för att få distinkta värden.

Här är frågan:

db.sessions.aggregate(
    [
        {
            $unwind: {
                path : "$tests"
            }
        },
        {
            $match: {
            "tests.device_serial":{$ne:""}
            }
        },
        {
            $group: {
              "_id":null,
                "device_serials":{$addToSet:"$tests.device_serial"}
            }
        },
    ]
);



  1. Installera Mongodb med lampa på Ubuntu (Linux)

  2. Hämta alla "dokument" från MongoDB "samling"

  3. Håll Redis-data vid liv mellan docker-compose ner och upp i Docker-behållaren

  4. Bästa MongoDB-schemat för twitter-klon?