虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > MongoDB数据库 > mongodbupdate多层嵌套数组解决办法

mongodbupdate多层嵌套数组解决办法
类别:MongoDB数据库   作者:码皇   来源:<a href="http://blog.csdn.net/mushuntaosama" target="_blank" rel="nofoll   点击:

mongodbupdate多层嵌套数组解决办法。

mongodbupdate多层嵌套数组解决办法。

version: 3.4.3

    {
    "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : [ {
    "destination" : "fr", "text": "Oui" }
    , {
    "destination" : "bf", "text": "uid" }
    , ]}

如果是一层数组,可以用如下语句更新数组里指定key的value

    db.getCollection('
    message'
    ).update({
    '
    _id'
    : 1, '
    translations.destination'
    : '
    fr'
    }
    ,{
    '
    $set'
    : {
    "translations.$.text": "asd" }
    }

如果再加一层嵌套

    {
    "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : [ {
    "destination" : "fr", "text": "Oui", "rating" : [ {
    "user_id" : 1, "rating" : 1 }
    , {
    "user_id" : 2, "rating" : 1 }
    ] }
    ]}

使用这个更新语句就会报错了

    db.getCollection('
    message'
    ).update({
    '
    _id'
    : 1, '
    translations.destination'
    : '
    fr'
    , '
    translations.rating.user_id'
    :'
    1'
    }
    ,{
    '
    $set'
    : {
    "translations.$.rating.$.rating": 5 }
    }

目前mongodb不支持多个$占位符,推荐的方法的修改数据结构,把数据格式改成这样,把数组元素改成key-value形式

    {
    "_id" : 1 "user_id": 1, "message" : "Yes" "translations" : {
    "fr": {
    "destination" : "fr", "text": "Oui", "rating" : [ {
    "user_id" : 1, "rating" : 1 }
    , {
    "user_id" : 2, "rating" : 1 }
    }
    }
    , "en": {
    ...}
    ]}

执行如下更新语句

    db.getCollection('
    message'
    ).update({
    '
    _id'
    : 1, '
    translations.destination'
    : '
    fr'
    , '
    translations.rating.user_id'
    :'
    1'
    }
    ,{
    '
    $set'
    : {
    translations.fr.rating.$.rating”
    : 5 }
    }

ps:只能使用一个$占位符的问题在社区里已经提了很久了,一直没有得到解决,希望下个版本可以解决。

相关热词搜索: