当前位置: 首页 > 面试题库 >

mongo可以更新阵列数据吗?

徐飞尘
2023-03-14
问题内容

我有一个像这样的mongo文件

{
    "_id" : ObjectId("50b429ba0e27b508d854483e"),
    "array" : [
        {
            "id" : "1",
            "letter" : "a"
        },
        {
            "id" : "2",
            "letter" : "b"
        }
    ],
    "tester" : "tom"
}

我希望能够插入和更新array与单个蒙戈命令内不使用条件find(),然后运行insert(),并update()根据对象的存在。

id是我要成为选择器的项目。所以如果我用这个更新数组:

{
    "id" : "2",
    "letter" : "c"
}

我必须使用一个$set声明

db.soup.update({
    "tester":"tom",
    'array.id': '2'
}, {
    $set: {
        'array.$.letter': 'c'
    }
})

如果我想在数组中插入一个新对象

{
    "id" : "3",
    "letter" : "d"
}

我必须使用一个$push声明

db.soup.update({
    "tester":"tom"
}, {
    $push: {
        'array': {
            "id": "3",
            "letter": "d"
        }
    }
})

我需要一种用于数组项的upsert。

我必须以编程方式执行此操作还是可以通过一个mongo调用来执行此操作?


问题答案:

我不知道在MongoDB 2.2上会向上插入嵌入式阵列的选项,因此您可能必须在应用程序代码中进行处理。

鉴于您希望将嵌入式数组视为虚拟集合,因此您可能需要考虑将数组建模为单独的集合。

您不能基于嵌入式数组中的字段值进行upsert,但是$addToSet如果尚不存在嵌入式文档,则可以使用它来插入:

db.soup.update({
    "tester":"tom"
}, {
    $addToSet: {
        'array': {
            "id": "3",
            "letter": "d"
        }
    }
})

这不适合您使用idarray元素匹配的确切用例,但是如果您知道期望的当前值,则可能会有用。



 类似资料:
  • 我想知道如何更新PrimeFaces数据表行。这是我的datatable照片,以便更好地了解我: ![1]: http://i.stack.imgur.com/N1jGz.png 我想为每一行选择他各自的状态,然后单击保存状态按钮来保存这些值。 这是我的xhtml页面代码: 提前感谢。

  • 我使用RecycerView使用游标显示sqlite数据库中的数据,当我从数据库中删除一项时,该项将被删除,但我的RecycerView视图不会刷新。 我必须回到我的主要活动,然后数据被刷新。我已经使用了notifyItemRemoved()和notifyDataSetChanged()

  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 我有一个简单的POJO(字段1,字段2,字段3),我使用HibernateORM,我有一个基本的需求:我永远不应该更新数据库中的字段3。一旦第一次插入一行,当我调用回购以通过id(findById)获取对象时,即使我调用字段3的setter(setField3()),调用保存方法也应该抛出错误或异常,指定我正在尝试更新字段3,我不应该。我不知道Hibernate是否可以处理这种需求,或者我是否必须

  • 如果我将一个字段定义为不可更新的,这是否意味着该字段根本不能更新?我想做的是在保存整个实体对象时防止字段被更新,但仍然能够编写显式更新该字段的查询。这可能吗? 我使用的是Hibernate和MySQL,但我更喜欢编写可移植代码。

  • 问题内容: 首先,有一点背景。我有一套Java应用程序,有些基于JPA,有些则没有。为了创建数据库,我目前正在使用Hibernates模式导出来为使用JPA的用户生成创建脚本。那些不使用JPA的人会手工生成脚本。然后使用ANT在应用程序安装过程中运行它们。对于更新,应用程序安装程序只需将更新脚本应用于数据库。 为了改善数据库更新的管理,我一直在研究Flyway和Liquibase。两者似乎几乎都可