无法通过查询获取mongo嵌入式文档中的聚合结果

时间:2016-07-14 10:16:12

标签: mongodb aggregation-framework mongo-java mongo-java-driver

查询mongo db中的嵌入式文档时出现问题。我正在尝试为用户获取conversationId,但它返回null。

示例文件:

{
"_id" : ObjectId("5787391f191fda3a4430c749"),
"conversationId" : "fWFGIr0xAbQytmVcQIPV",
"user" : [{_id : "800", "name" : "Tim"},{_id : "500", "name" : "Kingsley"},
{_id : "400", "name" : "Roger"}],
"type" : "PRIVATE"
}

查询:

Aggregation agg = newAggregation(
            match(Criteria.where("type").is("PRIVATE")),
            group("conversationId").push("user.id").as("users"),
            match(Criteria.where("users").all(Arrays.asList('800','400','500')))
            );
    AggregationResults<Rooms> groupResults = mongoOps.aggregate(agg, ROOMS, Rooms.class);
      List<Rooms> result = groupResults.getMappedResults();
      result.get(0).getId() // returns null

result.get(0).getId()返回null,根据我的查询,我期待用户的对话ID。

1 个答案:

答案 0 :(得分:1)

我不确定,为什么要对conversationId进行分组,然后创建一个用户ID参与该对话的集合。

如果您希望的结果是找到一个对话,其中用户“&#39; 800&#39;&#39; 400&#39;和&#39; 500&#39;,然后您可以立即使用查询$ all。

Mongo Query将如下所示:

db.test.find({"user._id":{"$all":["800","500","400"]}})