我知道MongoDB是一个“无模式”的数据库,但我无法用Java复制这个mongo查询似乎很奇怪(而且令人沮丧):
Object.keys(db.appnOffer.findOne());
我试图将keySet
拉入数组并迭代它,但无济于事。
答案 0 :(得分:0)
因为MongoDB是无模式的(尽管从应用程序的角度来看它具有灵活的schmema更为正确),但这不能可靠地工作。考虑像这样的文件
{
_id: new ObjectId(),
lastname: "Bar",
firstname: "Foo",
phones:[
{type: "work", number: "+1 234 567890"},
{type: "mobile", number: "+1 555 000000"}
]
}
现在,在我们到达phones
之前,我们没有问题。现在,应该将哪些内容视为关键:phones
或type
或number
?如果我们拿电话,嵌入式文件应该如何反序列化呢?
此外,由于某些文档可能缺少数据(因为您在模型中添加了字段),因此当字段丢失时可能会被忽略。
由于您使用的是Java,我建议您迭代entity classes' declared fields。
话虽如此:DBCollection.findOne() returns a DBObject,inherits the keySet() method of BSONObject。此方法返回Set<String>
,您可以按如下方式迭代:
DBObject obj = collection.findOne();
Set<String> keys = obj.keySet();
Iterator iterator = keys.iterator();
while(iterator.hasNext()){
String key = iterator.next();
Object value = obj.get(key);
/* Do whatever you want */
}