Mongodb:如果值不存在,如何将值添加到数组,但如果值存在,则更新值

部落

子菜是MajorFood项目中的一个数组。我要添加子菜单(如果不存在),并更新子菜单(如果确实存在)。

我尝试使用addToSet更新方法。这对于普通元素正常工作,但对于数组则失败。

                MajorFood.update({'_id' : majorFoodId, 'subdishes.food' : rowVals[0]},
                {$addToSet : {subdishes : {
                    food : rowVals[0],
                    energy : {
                        calories : s.getIntVal(rowVals[1]),
                        unit : rowVals[2]
                    }           
                }}}, {upsert : true}, function(err, doc){
                if(err){
                    s.l("err update" );
                    callback(err);
                    return;
                }
                s.l("success");
                callback(); 
            });

当有价值的食物已经存在于子菜中时,更新工作正常。但是,当必须将元素添加到数组时,它会崩溃。

我收到以下错误:

MongoError: Cannot apply $addToSet to a non-array field. 
Field named 'subdishes' has a non-array type Object

有一个方法可以在单个函数中执行此操作吗?

克列丹

您将无法通过单个原子更新来执行此操作。您可以在更新函数中使用回调函数来检查是否有更新,如果没有更新,则将其推送到数组,因为该文档不存在:

MajorFood.update(
    { 
        "_id": majorFoodId,
        "subdishes.food" : rowVals[0]
    },
    { 
        "$set": {
            "subdishes.$": {        
                //without $ you get the error The dotted field is not valid for storage     
                "energy.$.calories": s.getIntVal(rowVals[1]),
                "energy.$.unit": rowVals[2]
            } 
       }
    },
    function(err, numAffected, rawResponse) {
        console.log(numAffected);
        console.log(rawResponse);
        if (!numAffected) {
            /* Push to array if subdish doesn't exist hence there's no update */
            MajorFood.update(
                { "_id": majorFoodId }
                { 
                    "$push": { 
                        "subdishes": {
                            "food": rowVals[0],
                            "energy": {
                                "calories": s.getIntVal(rowVals[1]),
                                "unit": rowVals[2]
                            } 
                        }
                    }
                },
                function(err, numAffected) {
                    if(err){
                        s.l("err update" );
                        callback(err);
                        return;
                    }
                    s.l("success");
                    callback(); 
                }
            );
        }            

    }
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果使用mongodb在数组中不存在值,则执行Update的一项操作

来自分类Dev

如何添加到字典值或创建(如果不存在)

来自分类Dev

如果键不存在,则将值推入数组

来自分类Dev

将索引添加到表(如果不存在)

来自分类Dev

如何将arrayList2中不存在的值添加到arrayList1中?

来自分类Dev

Ruby如何迭代一个集合并创建一个哈希键(如果不存在),或者添加到值(如果键确实存在)

来自分类Dev

如果值不存在,则更新ElasticSearch脚本

来自分类Dev

使用逗号值将内容追加到文件(如果不存在)

来自分类Dev

如果其中存在来自innerHTML数组的值,如何将class添加到单元格或td?

来自分类Dev

MongoDb:将元素添加到数组(如果不存在)

来自分类Dev

mongodb mongoose-如果字段不存在,如何将文档添加到数组

来自分类Dev

检查值是否存在,如果不存在则添加到列表中

来自分类Dev

如何从数组中删除一个值(如果存在)或如何将其推送到数组(如果不存在)?

来自分类Dev

将侦听器添加到不存在的值

来自分类Dev

如果使用mongodb在数组中不存在值,则执行Update的一项操作

来自分类Dev

如果键存在,则将值添加到哈希

来自分类Dev

当源字段不存在时,将值添加到附加字段中,Access 2010

来自分类Dev

添加索引(如果不存在)并复制最接近的值

来自分类Dev

如果值存在,则执行MySQL更新;如果不存在,则插入MySQL?

来自分类Dev

如果不存在重复值,则将类/对象添加到数组列表

来自分类Dev

Ruby如何迭代一个集合并创建一个哈希键(如果不存在),或者添加到值(如果键确实存在)

来自分类Dev

如果键不存在,则创建数组,如果键已存在,则将值推入相同的键

来自分类Dev

如果值存在或不存在,如何添加固定的下划线?

来自分类Dev

如果行不存在,如何添加组合值?

来自分类Dev

如果值不存在则更新表

来自分类Dev

php搜索一维数组值,如果多维数组中不存在值,则添加具有零值的元素

来自分类Dev

如何仅在不存在的情况下将值附加到数组,如果不存在则将其删除?

来自分类Dev

MySQL:如果存在值,则对行进行更新,如果值不存在,则进行插入

来自分类Dev

如果不存在需要更新,如何检查表中是否存在值?

Related 相关文章

  1. 1

    如果使用mongodb在数组中不存在值,则执行Update的一项操作

  2. 2

    如何添加到字典值或创建(如果不存在)

  3. 3

    如果键不存在,则将值推入数组

  4. 4

    将索引添加到表(如果不存在)

  5. 5

    如何将arrayList2中不存在的值添加到arrayList1中?

  6. 6

    Ruby如何迭代一个集合并创建一个哈希键(如果不存在),或者添加到值(如果键确实存在)

  7. 7

    如果值不存在,则更新ElasticSearch脚本

  8. 8

    使用逗号值将内容追加到文件(如果不存在)

  9. 9

    如果其中存在来自innerHTML数组的值,如何将class添加到单元格或td?

  10. 10

    MongoDb:将元素添加到数组(如果不存在)

  11. 11

    mongodb mongoose-如果字段不存在,如何将文档添加到数组

  12. 12

    检查值是否存在,如果不存在则添加到列表中

  13. 13

    如何从数组中删除一个值(如果存在)或如何将其推送到数组(如果不存在)?

  14. 14

    将侦听器添加到不存在的值

  15. 15

    如果使用mongodb在数组中不存在值,则执行Update的一项操作

  16. 16

    如果键存在,则将值添加到哈希

  17. 17

    当源字段不存在时,将值添加到附加字段中,Access 2010

  18. 18

    添加索引(如果不存在)并复制最接近的值

  19. 19

    如果值存在,则执行MySQL更新;如果不存在,则插入MySQL?

  20. 20

    如果不存在重复值,则将类/对象添加到数组列表

  21. 21

    Ruby如何迭代一个集合并创建一个哈希键(如果不存在),或者添加到值(如果键确实存在)

  22. 22

    如果键不存在,则创建数组,如果键已存在,则将值推入相同的键

  23. 23

    如果值存在或不存在,如何添加固定的下划线?

  24. 24

    如果行不存在,如何添加组合值?

  25. 25

    如果值不存在则更新表

  26. 26

    php搜索一维数组值,如果多维数组中不存在值,则添加具有零值的元素

  27. 27

    如何仅在不存在的情况下将值附加到数组,如果不存在则将其删除?

  28. 28

    MySQL:如果存在值,则对行进行更新,如果值不存在,则进行插入

  29. 29

    如果不存在需要更新,如何检查表中是否存在值?

热门标签

归档