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

MongoDB:Наличие на вложен ключ

С MongoDb версия>=3.6 можете да използвате оператора $expr във вашата заявка и използвайте $objectToArray оператор за преобразуване на динамичния обект в масив, филтрирайте масива за полето за работна стойност, като използвате $ifNull като условен оператор.

Следният пример демонстрира този подход:

db.collection.find({
    $expr: {
        $gt: [
            {
                $size: {
                    $filter: {
                        input: { $objectToArray: '$$ROOT' },
                        cond: { 
                            $ifNull: ['$$this.v.work', false]
                        }
                    }
                }
            },
            0
        ]
    }
})

Не е добра практика да имате стойности като ключове и в момента (а вероятно и в бъдеще) не е възможно да се правят заявки към MongoDB колекции със заместващи символи в имената на полета.

За алтернативен дизайн на схема, лесен за запитване, бих предложил редизайн на схема, който следва този модел:

"_id" : ObjectId("55128d6315f3df650f2038cf"),
"customer_name" : "test user",
"createad" : "2011-04-14 16:44:09",
"data" : [ 
    {
        "key" : "123456",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }, 
    {
        "key" : "321456",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }, 
    {
        "key" : "789654",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }
]

}

Което можете да направите по следния начин

db.collection.find({ "data.work" : { $exists : true, $ne : null } })

за да провери съществуването на work поле в data масив.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. дата в MongoDB:при вмъкване на обекти Date в база данни Mongo, датата става 1 ден по-рано от себе си

  2. MongoError:ns не е намерен при опит за премахване на колекция

  3. Вземете броя на полетата във всеки документ чрез заявка с помощта на MongoDB java драйвер

  4. Много към много връзки с MongoDB в голям мащаб

  5. Натиснете към два отделни масива в едно извикване за актуализиране в mongodb