sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの2つの日付フィールドを比較します

    フィールドを、通常のクエリ一致を持つ別のフィールドの値と比較することはできません。ただし、これは集約フレームワークを使用して行うことができます:

    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. MongoDB $ project:以前のパイプラインフィールドを保持します

    2. IFindFluentインターフェースをモックする方法

    3. 埋め込みドキュメント値全体に対するMongoDB範囲クエリ

    4. mongodumpを使用して、特定の日付範囲に一致するレコードをダンプするにはどうすればよいですか?