0

我正在使用 mongo 来存储我的文档。其中一个如下所示。

Name:
  first: joe
  last: blo
address:
  city: Paris
  state: London
relatives:
  first order:
      aunt: ashley
      uncle: tom
  second order
      aunt: roma
      uncle: robin

我希望能够执行一个查询,该查询将为我提供匹配“阿姨”:“罗马”的文档。我正在使用 mongo java api 来访问它

根据我的理解和阅读以下查询应该有效,但它没有

 DBObject winner = new BasicDBObject("$match", new BasicDBObject("aunt", "roma") );
 System.out.println("count "+coll.aggregate(winner).getCommandResult());

谁能帮我理解并解释为什么会失败?

谢谢K

4

1 回答 1

1

我的建议是,为了更好地理解,您先使用 MongoDb javascript 控制台练习一下,先针对您的数据库集合测试您的查询,然后再为您正在使用的驱动程序(在您的情况下为 Java)直接编写它们。一个例子:

匹配这样描述的文档

{
    name: {
        first: "joe",
        last: "blo"
    } ,
    address: {
        city: "Paris",
        state: "London"
    },
    relatives: {
        first_order: {
            aunt: "ashley",
            uncle: "tom"
        },
        second_order: {
            aunt: "roma",
            uncle: "robin"
        }
    }
}

你会建立一个这样的查询

db.my_collection.find({"relatives.second_order.aunt": "roma"})

要将文档插入到名为 的集合my_collection中,很简单

db.my_collection.insert(
{
    name: {
        first: "joe",
        last: "blo"
    } ,
    address: {
        city: "Paris",
        state: "London"
    },
    relatives: {
        first_order: {
            aunt: "ashley",
            uncle: "tom"
        },
        second_order: {
            aunt: "roma",
            uncle: "robin"
        }
    }
})

您可能会阅读一些参考资料以将您的查询正确写入 Java API: http ://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/

以及使用 MongoDb 控制台的文档,在这种情况下查询子文档: http ://docs.mongodb.org/manual/reference/method/db.collection.find/#query-subdocuments

希望能帮助到你。

于 2013-11-09T02:22:27.307 回答