MongoDB обновляет поля в массиве - PullRequest
0 голосов
/ 05 марта 2012

Как я могу установить для "album1" значение "мой альбом" в массиве albums? Я знаю только его _id.

{
    "_id": ObjectId("4f41a5c7c32810e404000000"),
    "albums": {
    "0": {
        "_id": ObjectId("4f545d1bc328103812000000"),
        "name": "album1" 
    },
     "1": {
        "_id": ObjectId("4f545f56c328103c12000000"),
        "name": "album2" 
    },
    "2": {
        "_id": ObjectId("4f545f68c328103012000000"),
        "name": "album3" 
    },
    "3": {
        "_id": ObjectId("4f546642c328103c12000001"),
        "name": "album4" 
    }
}

1 Ответ

0 голосов
/ 05 марта 2012

Ваша схема неверна.Если вам нужен массив, вы должны определить его как таковой, а не сделать его картой (каковым он является на данный момент, поскольку ваши индексы массива фактически являются ключами).

Преобразовать в массив:

{
    "_id": ObjectId("4f41a5c7c32810e404000000"),
    "albums": [
    {
        "_id": ObjectId("4f545d1bc328103812000000"),
        "name": "album1" 
    },
    {
        "_id": ObjectId("4f545f56c328103c12000000"),
        "name": "album2" 
    },
    {
        "_id": ObjectId("4f545f68c328103012000000"),
        "name": "album3" 
    },
    {
        "_id": ObjectId("4f546642c328103c12000001"),
        "name": "album4" 
    }]
}

А затем обновить с помощью позиционного оператора:

db.col.update({'albums._id':..}, {$set:{'albums.$.name':"My Album"}})

Обратите внимание, что использование _id во встроенном элементе в лучшем случае сбивает с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...