【问题标题】:In Java how can I simply retrieve the Keys from a mongo document?在 Java 中,如何简单地从 mongo 文档中检索密钥?
【发布时间】:2015-08-27 13:44:58
【问题描述】:

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

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

我试图将keySet 拉入一个数组并遍历它,但无济于事。

【问题讨论】:

    标签: java arrays mongodb key


    【解决方案1】:

    因为 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 */
    }
    

    【讨论】:

    • 我确实添加了它并对其进行了调整以执行所需的操作。当然,我得到了一些对我来说毫无意义的东西:'用法:[--bucket bucketname] 动作,其中动作是其中之一:列表:列出存储中的所有文件放置文件名:将文件文件名放入存储中获取文件名1文件名2 :从存储中获取 filename1 并发送到 filename2 md5 文件名:对数据库中的文件进行 md5 哈希(用于测试)' 我一直得到这种类型的东西,但不知道它指的是什么。
    • @CLStegall 请添加相关方法的完整代码和堆栈跟踪。
    • 我发现这是我的 Eclipse 程序中的一个设置。现在一切都好!非常感谢!
    • @CLStegall 随意投票或接受答案,然后;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多