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

マングースでアグリゲーションを使用しているときに存在しないフィールドにアンワインドを適用するとどうなりますか

    いいえ、しません:

    簡単な例を次に示します。

    > db.test.insert({a:[1]})
    > db.test.insert({})
    
    > db.test.aggregate({$unwind:'$a'})
    { "_id" : ObjectId("557362a17b97d77c38793c21"), "a" : 1 }
    // no error -- but unwind only the document having the `a` field.
    

    しかし:

    > db.test.insert({a:2})
    > db.test.aggregate({$unwind:'$a'})
    // will result in error 15978:
    // """Value at end of $unwind field path '$a' must be an Array,
    //    but is a NumberDouble"""
    

    編集内容に従って、欠落のあるドキュメントを保持する必要がある場合 巻き戻すフィールド、あなたは$projectすることができます $ifNullを使用したデフォルト値

    > db.test.find()
    { "_id" : ObjectId("557362a17b97d77c38793c21"), "a" : [ 1 ] }
    { "_id" : ObjectId("557362a57b97d77c38793c22") }
    
    > db.test.aggregate([
        {$project: { a: { $ifNull: ['$a', [ null ]]}}},
        {$unwind: "$a"}
    ])
    { "_id" : ObjectId("557362a17b97d77c38793c21"), "a" : 1 }
    { "_id" : ObjectId("557362a57b97d77c38793c22"), "a" : null }
    



    1. MongoDbでjacksonを使用して日付フィールドをISODate()として保存する方法

    2. Redis-スレーブを手動でマスターに昇格させる

    3. Redis —大きな地図を保存するための最良の方法(辞書)

    4. ハウツー:HBase Thriftインターフェースの使用、パート2:行の挿入/取得