mongodb 插入一个数组 java_mongodb:推送到数组元素的子数组或添加到数组(如果不存在)...

考虑具有以下结构的文档的集合 webs

[

{

"_id": ObjectId("5631e7f6cc6b441000ad9033"),

"name": "web1",

"pagehits": [

{

"ip": "12.34.56.78",

"hits": [

ISODate("2015-10-28T11:06:37.536+0000"),

ISODate("2015-11-28T11:06:37.536+0000")

]

}

]

}

]

Web(当然)有 _id , name ,(其他未提及的属性)和 pagehits 数组 . 每个数组项对应一个ip . 此外,每个页面命中都会保存为 pagehit 项目的 hits 子数组中的日期 .

因此, add pagehit 函数的伪算法看起来像

find 网址提供 ObjectId

已经有一个当前用户ip的数组项?

yes :将当前日期追加到已存在的 pagehits 数组元素

no :向 pagehits 数组附加一个新项目,其中ip是当前用户ip,而 hits 是仅包含当前日期的数组 .

是否可以通过单个MongoDB调用( findOneAndUpdate )实现此 insert hit 函数?

保证所有网络都存在,因此无需在集合中插入整个文档 .

可能发生的两种情况的示例:

Case 1) 使用IP 192.168.0.1命中(尚未列在清单中):添加了一个新的子文档

[

{

"_id": ObjectId("5631e7f6cc6b441000ad9033"),

"name": "web1",

"pagehits": [

{

"ip": "12.34.56.78",

"hits": [

ISODate("2015-10-28T11:06:37.536+0000"),

ISODate("2015-11-28T11:06:37.536+0000")

]

},

{

"ip": "192.168.0.1",

"hits": [

ISODate("2016-04-08T11:25:37.536+0000")

]

}

]

}

]

Case 2) 使用IP 12.34.56.78命令(已在列表中):当前日期被推送到命中数组

[

{

"_id": ObjectId("5631e7f6cc6b441000ad9033"),

"name": "web1",

"pagehits": [

{

"ip": "12.34.56.78",

"hits": [

ISODate("2015-10-28T11:06:37.536+0000"),

ISODate("2015-11-28T11:06:37.536+0000"),

ISODate("2016-04-08T11:25:37.536+0000")

]

}

]

}

]

在使用Java将JSON文档数组插入MongoDB时,你需要使用BSON工具将JSON转换为BSON格式。以下是一个示例代码,可以将JSON数组插入MongoDB中: ``` import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; import java.util.ArrayList; import java.util.List; public class MongoDBTest { public static void main(String[] args) { // 创建MongoDB连接 MongoClient client = new MongoClient("localhost", 27017); // 获取MongoDB数据库 MongoDatabase database = client.getDatabase("test"); // 获取MongoDB集合 MongoCollection<Document> collection = database.getCollection("users"); // 创建JSON数组 String json = "[{ \"name\" : \"Tom\", \"age\" : 20 },{ \"name\" : \"Jerry\", \"age\" : 25 }]"; // 将JSON数组转换为BSON文档列表 List<Document> documents = new ArrayList<>(); JsonParser parser = new JsonParser(); JsonArray jsonArray = parser.parse(json).getAsJsonArray(); for (JsonElement jsonElement : jsonArray) { Document document = Document.parse(jsonElement.toString()); documents.add(document); } // 插入BSON文档列表到MongoDB集合 collection.insertMany(documents); // 关闭MongoDB连接 client.close(); } } ``` 在这个示例中,我们使用了JsonParser将JSON字符串转换为JsonArray,然后遍历JsonArray,将每个元素转换为BSON文档,并将文档添加到BSON文档列表中。最后,我们使用insertMany方法将BSON文档列表插入MongoDB集合中。注意,在使用BSON工具时,需要注意BSON格式与JSON格式的差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值