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

Как да $настроите елементи на под-под-масив в MongoDB

Ако знаете индекса в масива, можете да получите директен достъп до елемента на масива, като използвате нотация с точка.

update(
{ _id: ObjectId(xxxx) },
{ $set: { 'columns.0.panels.0.top' : 125}}
)

Уверете се, че сте поставили обозначения с точка път в кавички като низ.

Редактиране:

За да дам повече подробности как това може да работи динамично, ще дам пример в PHP:

$action = array("columns.$colNum.panels.$panelNum" => $newValue);

Да, има позиционен оператор , но изглежда не е достатъчно напреднал за промяна на масиви в масиви, това може да се промени в MongoDB 1.7.0

Има алтернатива, която можете да направите, вместо да се опитвате да напълните тази информация във вложен документ. Опитайте се да го изравните. Можете да създадете колекция, която има панелни и колонни обекти:

обект на колона:

{
_id: // MongoId
type: 'column',
user: 'username',
order: 1,
width: 30,
}

панелен обект:

{
_id: //MongoId
type: 'panel',
user: 'username',
parentColumn: //the columns _id string
top: 125,
left: 100
}

След това можете да намерите всички колони, които принадлежат на даден потребител, като направите:

find({ type: 'column', user:'username'});

Можете да намерите всички панели за конкретна колона, като направите:

find({type: 'panel', columnOwner:'ownerID'});

Тъй като всяка колона и панел ще имат уникален идентификатор, даден им от MongoDB, можете лесно да правите заявки и атомарно да задавате опции.

update({'_id': ObjectId('idstring')}, {$set : { 'top' : 125}});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да изберете едно поле в MongoDB с помощта на Pymongo?

  2. Колекция Mongodb като динамична

  3. MongoDb:намерете дълбоко вложен обект с $lookup

  4. Защо MongoDb сортирането е бавно с колекции за търсене

  5. спрете mongodb да създава динамично dbs и колекции