MongoDB 和 Java - 查找文档并嵌套插入更新
MongoDB with Java - find a document and nested insert update
我有这样的文档:
{
timestamp_hour: ISODate("xxx"),
userid: "xxx",
type: "xxx",
balances: {
1: {input: 100, output: 200},
2: {input: 200, output: 300},
500: {input: 5000, output: 5500},
...
}
}
我想将新的一对 number: {input: xxx, output: yyy}
插入 balances
,如果 timestamp_hour
和 userid
都匹配。 (有人告诉我,它更像是 upsert
)
代码会怎样?我与 Java 8 和 org.apache.storm.core
1.1.
这里没有upsert。找到文档时,只需在 balances 中添加一个新的嵌入字段。
MongoClient mc = new MongoClient();
MongoDatabase db = mc.getDatabase("db");
MongoCollection col = db.getCollection("col");
Bson query = Filters.and(Filters.eq("timestamp_hour", timestampHour), Filters.eq("userid", userId));
Document uDoc = new Document();
uDoc.put("input", xxx);
uDoc.put("output", yyy);
Bson update = Updates.set("balances." + number, uDoc);
col.updateOne(query, update);
我有这样的文档:
{
timestamp_hour: ISODate("xxx"),
userid: "xxx",
type: "xxx",
balances: {
1: {input: 100, output: 200},
2: {input: 200, output: 300},
500: {input: 5000, output: 5500},
...
}
}
我想将新的一对 number: {input: xxx, output: yyy}
插入 balances
,如果 timestamp_hour
和 userid
都匹配。 (有人告诉我,它更像是 upsert
)
代码会怎样?我与 Java 8 和 org.apache.storm.core
1.1.
这里没有upsert。找到文档时,只需在 balances 中添加一个新的嵌入字段。
MongoClient mc = new MongoClient();
MongoDatabase db = mc.getDatabase("db");
MongoCollection col = db.getCollection("col");
Bson query = Filters.and(Filters.eq("timestamp_hour", timestampHour), Filters.eq("userid", userId));
Document uDoc = new Document();
uDoc.put("input", xxx);
uDoc.put("output", yyy);
Bson update = Updates.set("balances." + number, uDoc);
col.updateOne(query, update);