在Java中,如何从mongo文档中检索密钥?

时间:2015-08-27 13:44:59

标签: java arrays mongodb key

我知道MongoDB是一个“无模式”的数据库,但我无法用Java复制这个mongo查询似乎很奇怪(而且令人沮丧):

Object.keys(db.appnOffer.findOne());

我试图将keySet拉入数组并迭代它,但无济于事。

1 个答案:

答案 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之前,我们没有问题。现在,应该将哪些内容视为关键:phonestypenumber?如果我们拿电话,嵌入式文件应该如何反序列化呢?

此外,由于某些文档可能缺少数据(因为您在模型中添加了字段),因此当字段丢失时可能会被忽略。

由于您使用的是Java,我建议您迭代entity classes' declared fields

话虽如此:DBCollection.findOne() returns a DBObjectinherits 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 */
}