【问题标题】:Not able to get the aggregate result in mongo embedded document by querying无法通过查询获得 mongo 嵌入文档中的聚合结果
【发布时间】:2016-08-12 03:45:23
【问题描述】:

在 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() 返回空值,根据我的查询,我期待用户的对话 ID。

【问题讨论】:

  • 你期待什么样的结果?
  • @chridam:我期待着 conversationId ,但我得到了空值。

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


【解决方案1】:

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

如果您想要的结果是找到用户“800”、“400”和“500”的对话,那么您可以直接使用 $all 的 find 查询。

Mongo 查询将如下所示:

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

【讨论】:

  • 是的,我想要的结果只是这样。但是,它没有找到所需的对话 ID
  • @Karthik:你试过上面的查询吗?你能粘贴那个java代码吗?
  • 聚合 agg = newAggregation( match(Criteria.where("type").is("PRIVATE")), group("conversationId").push("user._id").as( "users"), match(Criteria.where("users").all(userProfileIds))
  • @Karthik 您再次进行分组。根据您的陈述,您也不需要汇总。那么您可以尝试对上面给出的 mongo 查询进行“查找”查询吗?
  • 它的工作,我有一些其他问题stackoverflow.com/questions/38395261/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 2013-07-06
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多