【问题标题】:Mongodb aggregation, how to combine or merge fields then countMongodb聚合,如何组合或合并字段然后计数
【发布时间】:2013-10-30 14:18:03
【问题描述】:

我在集合中有财产(home) 数据。每个房屋可以有多个所有者,并存储为单独的字段,例如 {home: 1, owner1: Fred, owner2: Jason, owner3: Stan} 我想获取前 X 个所有者名称的列表。作为 mongodb 的新手,我能够调整一个基本示例来聚合和计算一个字段 (owner1),但我不知道如何组合来自 owner1、owner2、owner3 的名称然后计数。

我现在使用 pymongo 的情况

x = data2009.aggregate([
    { "$group": { "_id": "$OWNER1", "value": { "$sum": 1 } } },
    { "$sort": { "value": -1 } },
    { "$limit": 50 }
])

一个例子: 数据

{_id:1, home: 1, OWNER1: "Fred", OWNER2: "Stan", OWNER2: ""}
{_id:2, home: 2, OWNER1: "Jason", OWNER2: "Fred", OWNER2: "Stan"}
{_id:3, home: 3, OWNER1: "Fred", OWNER2: "Tim", OWNER2: "Stan"}
{_id:4, home: 4, OWNER1: "Stan", OWNER2: "", OWNER2: ""}

输出将是

{
{_id: Stan, value: 4}
{_id: Fred, value: 3}
{_id: Jason, value: 1}
{_id: Tim, value: 1}
}

【问题讨论】:

  • 我不确定这是否可能。您应该考虑修改架构以使用 OWNER 数组。
  • @JohnnyHK:我可以这样做,我只是从 CSV 文件中导入的。我想我应该在导入时创建一个数组。我仍然想知道这是否可能。

标签: mongodb aggregation-framework pymongo


【解决方案1】:

据我所知,聚合框架尚无法将多个字段重塑为数组值(可以将一个元素放入包含一个元素的数组中,但没有用)。下面的新功能解决了这个缺点,请投票给它-“$array 聚合表达式”-https://jira.mongodb.org/browse/SERVER-8141

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2014-02-27
    • 1970-01-01
    • 2019-04-06
    • 2021-12-16
    相关资源
    最近更新 更多