sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb dotaz konkrétní měsíc|rok ne datum

S MongoDB 3.6 a novějšími můžete použít $expr operátor ve vašem find() dotaz. To vám umožňuje vytvářet výrazy dotazu, které porovnávají pole ze stejného dokumentu v $match fázi.

db.customer.find({ "$expr": { "$eq": [{ "$month": "$bday" }, 9] } })

U ostatních verzí MongoDB zvažte spuštění agregačního kanálu, který používá $redact operátor, protože vám umožňuje začlenit do jediného kanálu funkcionalitu s $project k vytvoření pole, které představuje pole měsíce data a $match filtrovat dokumenty, které odpovídají dané podmínce měsíce září.

Ve výše uvedeném $redact používá $cond tenary operátor jako prostředek k poskytnutí podmíněného výrazu, který vytvoří systémovou proměnnou, která provádí redigování. Logický výraz v $cond zkontroluje shodu pole operátoru data s danou hodnotou, pokud se tato hodnota shoduje, pak $redact vrátí dokumenty pomocí $$KEEP systémovou proměnnou a zahodí jinak pomocí $$PRUNE .

Spuštění následujícího kanálu by vám mělo poskytnout požadovaný výsledek:

db.customer.aggregate([
    { "$match": { "bday": { "$exists": true } } },
    {
        "$redact": {
            "$cond": [
                { "$eq": [{ "$month": "$bday" }, 9] },
                "$$KEEP",
                "$$PRUNE"
            ]
        }
    }
])

Je to podobné jako u $project +$match combo, ale budete muset vybrat všechna zbývající pole, která jdou do kanálu:

db.customer.aggregate([
    { "$match": { "bday": { "$exists": true } } },
    {
        "$project": {
            "month": { "$month": "$bday" },
            "bday": 1,
            "field1": 1,
            "field2": 1,
            .....
        }
    },
    { "$match": { "month": 9 } }
])

S dalším alternativním, i když pomalým dotazem, pomocí find() metoda s $where jako:

db.customer.find({ "$where": "this.bday.getMonth() === 8" })


  1. SocketTimeout s otevřeným připojením v MongoDB

  2. Zničení / odstranění Queue() v Redis Queue (rq) programově

  3. Azure DataBricks Stream foreach selže s NotSerializableException

  4. Co bude dál pro Impala po vydání 1.1