我有一个chats
收集女巫样本文件
{
"_id" : ObjectId("57f95e8e385bb61c5cf2cd18"),
//some other fields
"messages" : [
{
"sender" : "57ec1aaa0ffe16123439d52b",
"message" : "Hello!",
"sentTime" : "Oct 13, 2016 1:51:31 AM"
},
{
"sender" : "57ec1aaa0ffe16123439d52b",
"message" : "Hello!",
"sentTime" : "Oct 13, 2016 1:51:33 AM"
}
]
}
我想在_id
字段的基础上搜索集合,并且只使用MongoDB的java驱动程序获取messages sub-document
的数据作为查询结果,因为我想使用Gson映射到POJO数组
期望的输出:
[
{
"sender" : "57ec1aaa0ffe16123439d52b",
"message" : "Hello!",
"sentTime" : "Oct 13, 2016 1:51:31 AM"
},
{
"sender" : "57ec1aaa0ffe16123439d52b",
"message" : "Hello!",
"sentTime" : "Oct 13, 2016 1:51:33 AM"
}
]
如何使用MongoDB的Java驱动程序
答案 0 :(得分:0)
我们需要指定查询和字段列表,以下是如何执行此操作的示例:
DB db = //get db
DBObject object = new BasicDBObject();
object.put("_id", new ObjectId("<some id>"));
DBObject fields = new BasicDBObject();
fields.put("messages", 1);
DBObject result = db.getCollection("test").findOne(object, fields);
System.out.println(result.get("messages"));
答案 1 :(得分:0)
也许它有点难看,但它会起作用。
chats.aggregate(Arrays.asList(
match(eq("_id", <your id here> )),
unwind("$messages"),
project(fields(excludeId(),
computed("sender", "$messages.sender"),
computed("message", "$messages.message"),
computed("sentTime", "$messages.sentTime")))
)).forEach(printBlock);
printBlock只打印出每个文档(你可以将它们收集到那里的数组中)。
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document.toJson());
}
};