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

mongodb:заявка за периода от време между две полета за дата

Най-добрият вариант е да използвате $redact етап на тръбопровод на агрегация:

db.collection.aggregate([
    { "$redact": {
        "$cond": {
            "if": {
                "$gt": [
                    { "$subtract": [ "$lastUpdate", "$createdDate" ] },
                    1000 * 60 * 60 * 24
                ]
            },
            "then": "$$KEEP",
            "else": "$$PRUNE"
        }
    }}
])

Така че гледате стойността на милисекунди, като разликата е по-голяма от стойността на милисекунди за един ден. $subtract прави математиката за разликата и когато се извадят две дати, се връща разликата в милисекунди.

$redact операторът приема логически израз като "if" и където това условие е true той предприема действието в "then", което е $$KEEP Документът. Където е false след това документът се премахва от резултатите с $$PRUNE .

Имайте предвид, че тъй като това е логическо условие, а не зададена стойност или диапазон от стойности, тогава „индекс“ не се използва.

Тъй като операциите в конвейера за агрегиране са кодирани по естествен начин, това е най-бързото изпълнение на такъв израз, което можете да получите.

Алтернативата е оценка на JavaScript с $where . Това отнема израз на функция на JavaScript, който трябва по подобен начин да върне true или false стойност. В обвивката можете да съкратите по следния начин:

db.collection.find(function() {
    return ( this.lastUpdate.valueOf() - this.createdDate.valueOf() )
       > ( 1000 * 60 * 60 * 24 );
})

Същото нещо, с изключение на това, че оценката на JavaScript изисква интерпретация и ще работи много по-бавно от .aggregate() еквивалентен. По същия начин този тип израз не може да използва индекс за оптимизиране на производителността.

Занай-доброто резултати, съхранете разликата в документа. След това можете просто да направите заявка директно към това свойство и, разбира се, можете също да го индексирате.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $sqrt

  2. MongoDB C# заявка масив от обекти, които съдържат стойност на свойство

  3. Как да настроите FeatureCompatibilityVersion в MongoDB

  4. класирайте класацията в монго с околните играчи

  5. Добре ли е да се отправят заявки към MongoDB няколко пъти на заявка?