sql >> Databasteknik >  >> NoSQL >> MongoDB

Jämför två datumfält i MongoDB

Du kan inte jämföra ett fält med värdet av ett annat fält med den normala frågematchningen. Du kan dock göra detta med aggregeringsramverket:

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

Jag lägger ...din vanliga andra fråga... där eftersom du kan få den biten att använda indexet. Så om du bara vill göra detta för dokument där name fältet är charles du kan göra:

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 } }
] );

Med ingången:

{ "_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" }

Detta returnerar:

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

Om du vill ha fler fält måste du lägga till dem i $project .



  1. MongoDB, multipelräkning (med $exists)

  2. Allvarligt fel:Klass 'Mongo' hittades inte i C:\\Apache Software Foundation\Apache2.2\htdocs\sample\testdb.php

  3. Montera Page Blob som en VHD i en batchfil

  4. Mongo Age Group Aggregation