说,我有以下文件:
{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']
答案 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" ]