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

Mongodb заявка конкретен месец|година не дата

С MongoDB 3.6 и по-нови, можете да използвате $expr оператор във вашия find() запитване. Това ви позволява да създавате изрази на заявка, които сравняват полета от един и същ документ в $match етап.

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

За други версии на MongoDB помислете за стартиране на конвейер за агрегация, който използва $redact оператор, тъй като ви позволява да включите с един тръбопровод, функционалност с $project за да създадете поле, което представлява месеца на поле за дата и $match за филтриране на документите, които отговарят на даденото състояние на месеца септември.

В горното $redact използва $cond тенарен оператор като средство за предоставяне на условния израз, който ще създаде системната променлива, която извършва редакцията. Логическият израз в $cond ще провери за равенство на полето на оператор за дата с дадена стойност, ако това съвпада, тогава $redact ще върне документите с помощта на $$KEEP системна променлива и изхвърля в противен случай с помощта на $$PRUNE .

Изпълнението на следния конвейер трябва да ви даде желания резултат:

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

Това е подобно на $project +$match комбо, но след това ще трябва да изберете всички останали полета, които влизат в конвейера:

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

С друга алтернатива, макар и бавна заявка, с помощта на find() метод с $where като:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. намерете идентификатора на последния поддокумент, вмъкнат в mongoose

  2. Връзката с MongoDb е отказана

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

  4. MongoDB:Намерете поддокумент в параметри за съвпадение на масив

  5. Грешка при свързване с Mongodb вътре в контейнера за докер