我在Mongodb 3.6上运行,带有mongo驱动程序3.4.3和spring数据mongo 1.5.10。下面是我的文档结构
{
"_id": 12345,
"_class": "com.example.ProductRates",
"rates": [
{
"productId": NumberInt(1234),
"rate": 100.0,
"rateCardId": NumberInt(1),
"month": NumberInt(201801)
},
{
"productId": NumberInt(1234),
"rate": 200.0,
"rateCardId": NumberInt(1),
"month": NumberInt(201802)
},
{
"productId": NumberInt(1234),
"rate": 400.0,
"rateCardId": NumberInt(2),
"month": NumberInt(201803)
},
{
"productId": NumberInt(1235),
"rate": 500.0,
"rateCardId": NumberInt(1),
"month": NumberInt(201801)
},
{
"productId": NumberInt(1235),
"rate": 234,
"rateCardId": NumberInt(2),
"month": NumberInt(201803)
}
]
}
正在尝试对数据进行批量更新,如下所示
db.rates.update(
{ "_id" : 1234 },
{ $set: { "rates.$[item].rate": 200 } },
{ multi: true,
arrayFilters: [ { "item.rateCardId": {$in: [ 1, 2]} } ]
}
)
现在,尝试将此代码转换为Java。下面是我能够进行批量更新的代码。不出所料,由于$
[]的使用,以下查询将更新所有文档。我试图弄清楚如何使用位置数组更新运算符(例如$ [one])在此处应用数组过滤器。
WriteResult wr = getMongoTemplate().updateMulti(
new Query(where("rates.rateCardId").is(1234)),
new Update().set("rates.$[].rate", 200),
ProductRates.class);
另外,我找不到足够的教程或文档来建议如何在Java中应用所有复杂的mongo查询。请建议是否有我可以参考的好书或教程。
应该是:
WriteResult wr = getMongoTemplate().updateMulti(
new Query(where("rates.rateCardId").is(1234)),
new Update().set("rates.$[item].rate", 200),
new UpdateOptions()
.arrayFilters(
Arrays.asList( Filters.in("item.rateCardId",Arrays.asList(1,2)) )
),
ProductRates.class
);
您需要确保基本的Java驱动程序为3.6.x或更高版本,以具有arrayFilters()
甚至可能支持添加UpdateOptions()
我运行在MongoDB 3.6,与mongo驱动程序3.4.3和Spring数据mongo 1.5.10。下面是我文档的结构 我正在尝试对数据进行批量更新,如下所示 现在并尝试将此代码转换为java。下面是我能够实现批量更新的代码。正如预期的那样,由于使用$[],下面的查询正在更新所有文档。我试图找出如何在这里使用位置数组更新运算符(如$[one])应用数组过滤器。 此外,我也找不到足够的教程或文
从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。 一、位运算概述 我们知道,计算机中的数在内存中都是以二进制形式进行存储的 ,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,这会大大提高程序的性能。 那么,涉及位运算的运算符如下表
嗨, 我还尝试使用com.querydsl.core.types.dsl.expressions和com.querydsl.core.types.predicate,如下所示: 但我得到了一个无效的运算符和错误。 怎么会这样呢?
假设: 2的补码形式的32位有符号整数 true和false是值为1和0的整数 java运算符 你能实现像<代码>
问题内容: 我在Redis上使用Lua,想比较两个带符号的64位数字,这些数字存储在两个8字节/字符的字符串中。 如何使用Redis中可用的库进行比较? http://redis.io/commands/EVAL#available- libraries 我想知道并检查。我认为这可能涉及为每个64位int提取两个32位数字,并对它们进行一些巧妙的数学运算,但是我不确定。 我有一些代码可以使这一过程
问题内容: 当遇到按位移位运算符时,我遇到了一个有趣的场景。如果第二个操作数为负,按位移位运算如何工作?。 即,<< << b,“ <<”将a中的位模式向左移动b位。但是,如果b为负数,在运行时是否应该出错? 我能够成功运行以下代码,但我不知道它是如何工作的? 输入项 结果 “ a”的ASCII码为97。有人可以帮助我了解其工作原理吗? 问题答案: 但是,如果b为负数,在运行时是否应该出错? 不符