not*_*.no 34 java mongodb nosql-aggregation mongo-java jongo
我正在使用mongo 2.2.3和java驱动程序.我的困境,我必须把一个字段和值推入一个数组,但我似乎无法弄清楚如何做到这一点.我的数据样本:
"_id" : 1,
"scores" : [
{
"type" : "homework",
"score" : 78.97979
},
{
"type" : "homework",
"score" : 6.99
},
{
"type" : "quiz",
"score" : 99
}
]
Run Code Online (Sandbox Code Playgroud)
我可以$推入shell:
db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}})
Run Code Online (Sandbox Code Playgroud)
但是当我把它翻译成java时,我迷惑自己并将键盘放在墙上.
到目前为止我的java代码(不完整和错误):
DBObject find = new BasicDBObject("_id", 1);
DBObject push = new BasicDBObject("$push", new BasicDBObject(
"scores", new BasicDBObject()));
Run Code Online (Sandbox Code Playgroud)
Luc*_*lis 33
DBObject listItem = new BasicDBObject("scores", new BasicDBObject("type","quiz").append("score",99));
DBObject updateQuery = new BasicDBObject("$push", listItem);
myCol.update(findQuery, updateQuery);
Run Code Online (Sandbox Code Playgroud)
小智 16
由于每个更新案例mongodb-driver 3.1.都有一个构建器类,com.mongodb.client.model.Updates其中包含适当的方法.在这种情况下,这将是:
Document score = new Document().append("type", "quiz")
.append("score",99);
collection.updateOne(eq("_id", "1"),Updates.addToSet("scores", score));
Run Code Online (Sandbox Code Playgroud)
Joh*_*yHK 12
如果你对shell的查询格式更有兴趣,你可能会发现它更容易用来构建JSON.parse你DBObject的$push:
import com.mongodb.util.JSON;
String json = "{$push:{scores:{type:'quiz', score:99}}}";
DBObject push = (DBObject) JSON.parse(json);
Run Code Online (Sandbox Code Playgroud)
使用Jongo,你可以像在shell中一样:
db.collection.update({_id:1},{$push:{scores:{type:"quiz", score:99}}})
Run Code Online (Sandbox Code Playgroud)
成为Java:
collection.update("{_id:1}").with("{$push:{scores:{type:#, score:#}}}", "quiz", 99);
Run Code Online (Sandbox Code Playgroud)
没有花哨的DBObject需要;-)
| 归档时间: |
|
| 查看次数: |
32201 次 |
| 最近记录: |