当前位置: 首页 > 知识库问答 >
问题:

mongo更新:在数组中向上插入元素

丘普松
2023-03-14

我想根据文档id和元素id向上插入数组中的元素。当前,只有当数组中的元素已准备就绪时,它才起作用(更新有效,插入无效)。

因此,这些集合:

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": [
            {
                "_id": "5a65fd0363e2a32531ed9f9c"
            }
        ]
    }]

收到此请求:

query = { _id: '5a65fcf363e2a32531ed9f9b', 'ressources._id': '5a65fd0363e2a32531ed9f9c' };
update = { '$set': { 'ressources.$': { '_id': '5a65fd0363e2a32531ed9f9c', qt: '153', unit: 'kg' } } };
options = {upsert:true};
collection.update(query,update,options);

将给出此ok结果:

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": [
            {
                "_id": "5a65fd0363e2a32531ed9f9c",
                "qt": 153,
                "unit": "kg"
            }
        ]
    }]

如何使相同的请求适用于这些初始集合:

    [{
        "_id": "5a65fcf363e2a32531ed9f9b"
    }]

[{
        "_id": "5a65fcf363e2a32531ed9f9b",
        "ressources": []
    }]

如何使upert工作?upert仅适用于整个文档吗?目前,我面临这个错误:

位置运算符未从查询中找到所需的匹配项。

谢谢

共有1个答案

柴飞星
2023-03-14

我也试着想办法。我只找到了一种方法:

  1. 按id获取模型
  2. 手动更新数组(通过javascript)
  3. 保存模型

很遗憾知道在2018年你仍然不得不做这样的事情。

更新:

这将更新viewData数组中的特定元素

db.collection.update({
    "_id": args._id, 
    "viewData._id": widgetId
}, 
{
    $set: {
        "viewData.$.widgetData": widgetDoc.widgetData
    } 
})

$push命令将添加新项目

 类似资料:
  • 我们正在使用Talend工具将数据从Oracle迁移到Mongo DB,我们需要将对象Id添加到数组中的每个对象。我们尝试使用具有固定值的属性@type作为ObjectId,但没有成功。 我们需要以下输出: { “_id”:“12243”, “name”:“ABCD”, “城市”:“XYZ”, “请求”:[ { “\u id”:ObjectId(“5efdcf15ea9355c419fc9699”

  • 问题内容: 我有一个使用sqlserver精简版和实体框架进行数据访问的c#项目。我需要向数据库插入或更新大量行(5000+或更多),因此,如果键存在,请更新记录(如果未插入)。我找不到紧凑型版本和EF做到这一点的方法,而没有糟糕的性能,即在一台核心i7计算机上花了2分钟以上的时间。我尝试搜索记录以查看它是否存在,然后插入(如果不存在)或更新(如果存在),搜索是该记录上的杀手kill。我曾尝试编译

  • 问题内容: 假设我插入了文档。 现在,假设我要添加一个字段并对其进行更新。我怎么做?这似乎不起作用..... 问题答案: 在pymongo中,您可以使用以下内容 进行更新:如果在数据库中未找到该帖子,则将插入Upsert参数而不是更新。 文档可在mongodb网站上找到。 UPDATE 对于版本> 3,请使用 update_one 而不是 update :

  • 我在将字符串数组插入mongo DB时遇到问题。在数组的特定大小之后,驱动程序挂起-不会抛出异常(超时或错误)。当我缩短长度时,一切正常。有人能解释这种奇怪的行为吗?很抱歉这个newbee问题,但我找不到一个现有的问题。 Mongo DB版本 非工作文档

  • 问题内容: 我正在尝试编写一个脚本,该脚本会将新的用户记录追加到ElasticSearch,如果该用户已经存在,则更新任何信息,如果新对象中存在更新的PaymentInfo对象,则将其添加到用户的Payments数组中。这是到目前为止我正在使用的简化版本: 这几乎可以满足我的要求,因为它可以正确地插入文档,或者如果用户具有相同的ID,则可以更新文档,但是如果该用户已经存在,则缺少将这个Paymen

  • 我的用户表有以下存储库界面。 我想禁用在用户表中插入新实体,并仅在存在现有条目的情况下使用保存功能来更新现有条目。我如何才能做到这一点?是否有可以传递到存储库界面的选项?或者,当没有匹配的实体时,我应该重写save方法而不执行任何操作吗?