MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

So sánh hai trường ngày tháng trong MongoDB

Bạn không thể so sánh một trường với giá trị của một trường khác với kết hợp truy vấn bình thường. Tuy nhiên, bạn có thể làm điều này với khung tổng hợp:

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

Tôi đặt… truy vấn bình thường khác của bạn… vào đó khi bạn có thể làm cho bit đó sử dụng chỉ mục. Vì vậy, nếu bạn chỉ muốn thực hiện việc này cho các tài liệu có name trường là charles bạn có thể làm:

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

Với đầu vào:

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

Điều này trả về:

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

Nếu bạn muốn thêm bất kỳ trường nào, bạn cần thêm chúng vào $project .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Truy vấn lồng nhau MongoDB Chỉ trả về kết quả xuất hiện cuối cùng

  2. mongo - vấn đề kết nối ruby

  3. tiếp tục trong cursor.forEach ()

  4. Loại trừ các trường cụ thể trong chỉ mục ký tự đại diện trong MongoDB

  5. Thuộc tính Mongoose add expires cho một trường cụ thể