gpt4 book ai didi

java - 检索作为子文档的数组元素中符合条件的所有文档

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:33 25 4
gpt4 key购买 nike

 {
"_id" : ObjectId("577b54816081dd32cd3e2d60"),
"user" : ObjectId("577b54816081dd32cd3e2d5e"),
"journals" : [
{
"title" : "Journal Title2",
"desc" : "desx2",
"feeling" : 3,
"date" : ISODate("2016-07-05T06:32:45.404Z"),
"deleteFl" : true,
"_id" : ObjectId("577b548d6081dd32cd3e2d64")
},
{
"title" : "Journal Title3",
"desc" : "desx3",
"feeling" : 3,
"date" : ISODate("2016-07-05T06:49:00.156Z"),
"deleteFl" : false,
"_id" : ObjectId("577b585c6081dd32cd3e2d6d")
},
{
"title" : "Journal Title4",
"desc" : "desx4",
"feeling" : 3,
"date" : ISODate("2016-07-05T06:49:06.700Z"),
"deleteFl" : false,
"_id" : ObjectId("577b58626081dd32cd3e2d70")
}
]
}

以上是我的文档结构

现在,我需要所有deleteFl = false的日记文档。

我尝试使用Java Mongo驱动程序以这种方式

getDatabase().getCollection("journals").find(and(eq("user", user), eq("journals.deleteFl", false)));

但它仍然给我返回了所有文档,包括“deleteFl”:true。这里有什么帮助吗?

最佳答案

实际上,您的查询返回 1 个文档,因为数据位于 1 个文档内。您想要的是限制文档的返回字段(限制子文档)。

注意:您可以使用elemMatch来做到这一点在投影中,限制查询返回的字段。但 elemMatch 将只返回一个子文档。 (我使用 elemMatch 发布了删除的错误答案)

当您需要数组内的所有子文档且仅特定子文档时,您需要使用聚合管道。这是一个经过测试的代码,可以执行您想要的操作(只需更改数据库和集合名称):

    MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection collection = db.getCollection("test");

Iterable<Document> output = collection.aggregate(asList(
new BasicDBObject("$unwind", "$journals"),
new BasicDBObject("$match", new BasicDBObject("journals.deleteFl", false))
));

for (Document dbObject : output)
{
System.out.println(dbObject);
}

关于java - 检索作为子文档的数组元素中符合条件的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com