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

Сравнете две полета за дата в MongoDB

Не можете да сравните поле със стойността на друго поле с нормалното съвпадение на заявката. Можете обаче да направите това с рамката за агрегиране:

db.so.aggregate( [
    { $match: …your normal other query… },
    { $match: { $eq: [ '$modified', '$sync' ] } }
] );

Поставям ... нормалната ви друга заявка ... там, тъй като можете да накарате този бит да използва индекса. Така че, ако искате да направите това само за документи, където name полето е charles можете да направите:

db.so.ensureIndex( { name: 1 } );
db.so.aggregate( [
    { $match: { name: 'charles' } },
    { $project: { 
        modified: 1, 
        sync: 1,
        name: 1,
        eq: { $cond: [ { $gt: [ '$modified', '$sync' ] }, 1, 0 ] } 
    } },
    { $match: { eq: 1 } }
] );

С въвеждането:

{ "_id" : ObjectId("520276459bf0f0f3a6e4589c"), "modified" : 73845345, "sync" : 73234 }
{ "_id" : ObjectId("5202764f9bf0f0f3a6e4589d"), "modified" : 4, "sync" : 4 }
{ "_id" : ObjectId("5202765b9bf0f0f3a6e4589e"), "modified" : 4, "sync" : 4, "name" : "charles" }
{ "_id" : ObjectId("5202765e9bf0f0f3a6e4589f"), "modified" : 4, "sync" : 45, "name" : "charles" }
{ "_id" : ObjectId("520276949bf0f0f3a6e458a1"), "modified" : 46, "sync" : 45, "name" : "charles" }

Това връща:

{
    "result" : [
        {
            "_id" : ObjectId("520276949bf0f0f3a6e458a1"),
            "modified" : 46,
            "sync" : 45,
            "name" : "charles",
            "eq" : 1
        }
    ],
    "ok" : 1
}

Ако искате още полета, трябва да ги добавите в $project .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да съпоставим присъединени колекции с помощта на Laravel и MongoDB?

  2. Намиране на дублиращи се стойности в масив MongoDB

  3. Премахване на документи от колекция MongoDB въз основа на час на поле за дата

  4. mongoexport с параметри + node.js + дъщерен процес

  5. Развийте след това групово агрегиране в MongoDB C#