我有一个像这样的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"
}
}
})
这不适合您使用id
array元素匹配的确切用例,但是如果您知道期望的当前值,则可能会有用。
我想知道如何更新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。两者似乎几乎都可