如何解决MongoDB嵌套查询使用Java驱动程序返回null
我正试图从mongodb集合的'DEBIT'字段中获取'code',格式如下:
"_id" : ObjectId("1"),{...}
"bookEntryActions" : {
"CREATE" : [
{
"nature" : "DEBIT","code" : "123"
},{
"nature" : "CREDIT","code" : "456"
}
],"DELETE" : [
{
"nature" : "DEBIT","code" : "789"
}
]
{...}
}
我尝试了以下方法:
方法1:
Document debitGlAccountCode = (Document)landlord.get("bookEntryActions.CREATE.1");
方法2:
Document bookEntryActions = (Document) landlord.get("bookEntryActions");
Document creationRentCodes = (Document) bookEntryActions.get("CREATE");
ObjectId debitGlAccountCode = (ObjectId) creationRentCodes.get(Filters.eq("nature","DEBIT"));
方法3:
ObjectId debitGlAccountCode = (ObjectId) landlord.get(Filters.eq("bookEntryActions.CREATE.nature","DEBIT"));
我的问题是我尝试过的所有方法中,.get(“ CREATE”)的返回为null。有谁知道这个问题可能是什么?我已经使用Robo3T验证了所有房东的CREATE字段。
编辑:每个变量已获取如下数据
final MongoCollection<Document> landlordCollection = db.getCollection("landlord");
final FindIterable<Document> landlordDocs = landlordCollection.find();
MongoCursor<Document> llDocIter = landlordDocs.iterator();
while(llDocIter.hasNext()){
Document landlord = llDocIter.next();
LOGGER.info("landlord bookEntryActions: " + landlord.get("bookEntryActions"));
LOGGER.info("landlord create: " + landlord.get("bookEntryActions.CREATE"));
landlordArrayList.add(landlord);
}
从那里开始,我有一个foreach循环,它遍历了arrayList中的所有地主,并且是使用上面先前尝试过的方法的地方。 (注意:我现在正在使用数组列表,因为调试时使用它会更容易一些。最终,我将在while循环中进行所有操作。)
解决方法
事实证明,数据库“ CREATE”的建立方式是文档的数组列表,因此我刚使用了错误的数据类型。修改代码使其适用于arraylist而不是Document即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。