首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB PHP (SUM)?

MongoDB PHP (SUM)?
EN

Stack Overflow用户
提问于 2013-06-28 15:52:06
回答 1查看 1.3K关注 0票数 0

作为mysql查询:select sum(adet) from stok where isbn=$isbn。我想把这个查询作为mongodb查询,但是我做不到。我读过一些代码示例,但我不明白它是如何工作的。

我需要些帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-06-29 04:01:31

MongoDB的查询语言没有给我们提供执行求和的能力,但我们可以利用它的aggregation framework来执行。

给定以下示例数据:

代码语言:javascript
复制
> db.stok.insert({ isbn:"foo", adet: 5 })
> db.stok.insert({ isbn:"foo", adet: 3 })
> db.stok.insert({ isbn:"foo", adet: 1 })
> db.stok.insert({ isbn:"bar", adet: 2 })
> db.stok.insert({ isbn:"bar", adet: 4 })
> db.stok.find()
{ "_id" : ObjectId("51cde94037a16345b5316987"), "isbn" : "foo", "adet" : 5 }
{ "_id" : ObjectId("51cde94437a16345b5316988"), "isbn" : "foo", "adet" : 3 }
{ "_id" : ObjectId("51cde94b37a16345b5316989"), "isbn" : "foo", "adet" : 1 }
{ "_id" : ObjectId("51cde95337a16345b531698a"), "isbn" : "bar", "adet" : 2 }
{ "_id" : ObjectId("51cde95637a16345b531698b"), "isbn" : "bar", "adet" : 4 }

我们可以将"foo“isbn值的所有adet值相加,使用以下管道(即聚合操作符序列):

代码语言:javascript
复制
> db.stok.aggregate(
... { $match: { isbn: "foo"}},
... { $group: { _id: 1, sum: { $sum: "$adet" }}}
... );
{ "result" : [ { "_id" : 1, "sum" : 9 } ], "ok" : 1 }

在这里,我们使用$match通过isbn字段缩小考虑的文档范围,然后使用$group将所有文档收集到单个存储桶中,并将adet字段与总和聚合在一起。

我们还可以通过在分组中使用非常数isbn来计算每个不同_id值的总和:

代码语言:javascript
复制
> db.stok.aggregate({ $group: { _id: "$isbn", sum: { $sum: "$adet" }}});
{
    "result" : [
        {
            "_id" : "bar",
            "sum" : 6
        },
        {
            "_id" : "foo",
            "sum" : 9
        }
    ],
    "ok" : 1
}

上面的例子使用了JS,但是您可以使用MongoCollection::aggregate()助手方法,或者通过使用MongoDB::command()直接调用aggregate命令,在PHP中执行聚合查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17359848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档