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

Актуализиране на вложени масиви в mongodb

Ето големият въпрос, трябва ли да използвате операциите „addToSet“ и „push“ на Mongo? Ако наистина планирате да модифицирате само отделни елементи в масива, тогава вероятно трябва да изградите тези масиви като обекти.

Ето как бих структурирал това:

{
    id: 1,
    items: 
        { 
          "2" : { "blocks" : { "3" : { txt : 'hello' } } },
          "5" : { "blocks" : { "1" : { txt : 'foo'}, "2" : { txt : 'bar'} } }
        }
}

Това основно трансформира всичко в JSON обекти вместо масиви. Губите възможността да използвате $push и $addToSet но мисля, че това прави всичко по-лесно. Например, вашата заявка ще изглежда така:

db.objects.update({'items.2':{$exists:true} }, {'$set':{'items.2.blocks.0.txt':'hi'}})

Ще забележите също, че съм изхвърлил "идентификаторите". Когато влагате неща като това, обикновено можете да замените "ID" с просто използване на това число като индекс. Концепцията "ID" вече се подразбира.

Тази функция е добавена в 3.6 с изразителни актуализации.

db.objects.update( {id:1 }, { $set:{ 'items.$[itm].blocks.$[blk].txt':"здравей", } }, { multi:false, arrayFilters:[ { 'itm.id':2 }, { 'blk.id':3} ] } )



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Автоматизиране и управление на MongoDB в облака

  2. Вграден документ срещу препратка в модела на дизайн на мангуста?

  3. Вероятност за сблъсък на ObjectId срещу UUID в голяма разпределена система

  4. Преименувайте ObjectId _id на id при десериализация на Jackson с Jongo и MongoDB

  5. mongo - не можа да се свърже със сървър 127.0.0.1:27017