mongodb聚合查询字段值长度的总和

时间:2016-04-04 10:37:26

标签: mongodb mongodb-query aggregation-framework

说,我有以下文件:

{name: 'A', fav_fruits: ['apple', 'mango', 'orange'], 'type':'test'}
{name: 'B', fav_fruits: ['apple', 'orange'], 'type':'test'}
{name: 'C', fav_fruits: ['cherry'], 'type':'test'}

我正在尝试查询以查找返回的整个文档的fav_fruits字段总数:

cursor = db.collection.find({'type': 'test'})

我期待输出如:

cursor.count() = 3 // Getting

如果不了解聚合,mongodb聚合框架可以帮助我以任何方式实现这一点:

1. sum up the lengths of all 'fav_fruits' field: 6 

和/或

2. unique 'fav_fruit' field values = ['apple', 'mango', 'orange', 'cherry']

3 个答案:

答案 0 :(得分:0)

这样做只能得到fav_fruits数组中的水果数量:

db.fruits.aggregate([
    { $match: { type: 'test' } },
    { $unwind: "$fav_fruits" },
    { $group: { _id: "$type", count: { $sum: 1 } } }
]);

这将返回水果总数。

但是,如果您想获取唯一fav_fruits数组以及每个文档的fav_fruits字段中的元素总数,请执行以下操作:

db.fruits.aggregate([
    { $match: { type: 'test' } },
    { $unwind: "$fav_fruits" },
    { $group: { _id: "$type", count: { $sum: 1 }, fav_fruits: { $addToSet: "$fav_fruits" } } }
])

答案 1 :(得分:0)

你可以试试这个。它可能对你有所帮助。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable


    has_many :pins, dependent: :destroy   

    validates :name, presence: true  

 def admin?
     admin
 end

end

答案 2 :(得分:0)

您需要在$project阶段之后$match您的文档,并使用$size运算符返回每个数组中的项目数。然后在$group阶段使用$sum累加器运算符返回总计数。

db.collection.aggregate([
    { "$match": { "type": "test" } },
    { "$project": { "count": { "$size": "$fav_fruits" } } }, 
    { "$group": { "_id": null, "total": { "$sum": "$count" } } }
])

返回:

{ "_id" : null, "total" : 6 }

要获得独特的fav_fruits,只需使用.distinct()

即可
> db.collection.distinct("fav_fruits", { "type": "test" } )
[ "apple", "mango", "orange", "cherry" ]