Java mongodriver 3.4.9使用$ inc和$ sum运算符更新字段的最简单方法是什么

时间:2017-10-07 09:32:17

标签: java mongodb

我正在使用mongodb来处理我的java应用程序并且我遇到了这个问题,我想用java语言转换mongo操作,但我找不到解决方案。 Mongo的操作是:

$ INC:

db.products.update(
   { _id: "someId" },
   { $inc: { quantity: +2 } }
)

$总和:

db.students.aggregate([
   {
     $group: {
       value: { $sum: valueToAdd},
     }
   }
])

这是我到目前为止的结果,但仍然无法正常工作。

Bson filter = Filters.eq("_id", someId);
UpdateOptions options = new UpdateOptions().upsert(true);   
Bson incrementFirstTry = new Document("$inc", new Document().append("quantity", 2));
Bson incrementSecondTry = new Document("quantity", +2);
Bson sumFirstTry = new Document("$sum", new Document("value", valueToAdd))
Bson sumSecondTry = Aggregates.group(someId, Accumulators.sum("value", valueToAdd));

collection.updateOne(filter, incrementFirstTry, options);
collection.updateOne(filter, incrementSecondTry, options);
collection.updateOne(filter, sumFirstTry, options);
collection.updateOne(filter, sumSecondTry, options);

在递增时都表示数量是一个字符串,因此无法将其添加到整数。

当使用$ sum时,它会说:com.mongodb.MongoWriteException:Unknown modifier:$ group OR com.mongodb.MongoWriteException:Unknown modifier:$ sum

我知道我所尝试的并不完全正确,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

两个问题:

  1. 如果我不得不猜测,我会说quantity表中的products字段以某种方式在数量字段中输入了一个字符串。 incrementFirstTry看起来不错; incrementSecondTry没有按你的想法行事;它只是将字段设置为正2,而不是将其递增2。

  2. 您遗漏了_id声明中的$group字段。