【发布时间】:2015-08-27 13:44:58
【问题描述】:
我知道 MongoDB 是一个“无模式”数据库,但我无法在 Java 中复制这个 mongo 查询似乎很奇怪(而且令人沮丧):
Object.keys(db.appnOffer.findOne());
我试图将keySet 拉入一个数组并遍历它,但无济于事。
【问题讨论】:
我知道 MongoDB 是一个“无模式”数据库,但我无法在 Java 中复制这个 mongo 查询似乎很奇怪(而且令人沮丧):
Object.keys(db.appnOffer.findOne());
我试图将keySet 拉入一个数组并遍历它,但无济于事。
【问题讨论】:
因为 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 */
}
【讨论】: