【问题标题】:Polishing a mongodb query完善一个 mongodb 查询
【发布时间】:2010-10-20 06:29:26
【问题描述】:

这是我当前的查询:使用 Java+mongoDB

    {
    BasicDBObject select = new BasicDBObject();
    select.put("info.name.fn", 1);

    DBCursor cursor = collection.find(new BasicDBObject(), select);
    while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }

输出如下:

{ "_id" : { "$oid" : "123"} , "info" : { "name" : { "fn" : "foo"}}}
{ "_id" : { "$oid" : "123"} , "info" : { "name" : { "fn" : "bar"}}}
{ "_id" : { "$oid" : "123"} , "info" : { "name" : { "fn" : "baz"}}}

_ids 已更改以适应输出。我的问题是,我要给出什么查询才能得到输出:

foo
bar
baz

有可能吗?还是每个查询总是以上述格式返回它?我不能运行 distinct() 因为有重复的名称。

谢谢。

【问题讨论】:

  • 我也试过 cursor.next.get("info.name.fn") 但它返回 null。
  • 我认为你必须把它分解成三个得到的链。尽管这是对 Java API 的潜在改进请求。也许在 MongoDB 邮件列表上询问它。不过,有人已经想到了这一点,它可能被丢弃了,因为它在某个地方造成了麻烦。
  • 好的,我会把它发布到 mongodb-user GG 上。谢谢。
  • 还提到你必须做的所有演员。
  • 不确定 Java 和 Mongo 如何协同工作,但您应该查看文档中的“检索字段子集”部分。这允许您限制查询检索的内容。 mongodb.org/display/DOCS/…

标签: java mongodb


【解决方案1】:

你能得到的最小查询结果就是你上面显示的那个。

不过,您不必打印所有这些内容。

 System.out.println(cursor.next().get("info").get("name").get("fn"));

【讨论】:

  • 是的,这行得通。除了我必须添加两次 BasicBSONObject 演员。现在它看起来像这样: System.out.println(((BasicBSONObject) ((BasicBSONObject) cursor.next().get("info")).get("name")).get("fn"))
  • 哦。那个选角很丑但我想你对此无能为力。
  • 是的。我会将这个问题留待久一点,看看我是否能找到其他答案。也将其发布在 mongodb-user 上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2018-06-24
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
相关资源
最近更新 更多