从文档中计算数组中的元素

时间:2015-06-30 07:04:52

标签: javascript mongodb meteor count

我正在尝试设置一个博客,其中每个帖子都包含多个段落。我只想计算一个特定帖子中段落的数量。在“博客”集合中,我的文档(=帖子)如下:

{ id : String
  title : String
  paragraphs : [ { position: Int, body: String } ] }

我想要一个返回Integer的函数。也许接近:

var NumberParagraphs = Blog.find( {id: id} ).paragraphs.length 

(显然这不起作用!)......你能告诉我调查的方法吗?在网上搜索时,我对.count()$size.aggregate

的用例感到困惑

3 个答案:

答案 0 :(得分:2)

.find()方法不会返回单个文档。因此,您要么将这些文档作为数组循环:

Blog.find({ id: id }).fetch().forEach(function(doc) {
     var NumParagraphs = doc.paragraphs.length;
     // Then do something useful
})

或仅.findOne()单个文档:

var doc = Blog.findOne({ id: id });
var NumParagraphs = doc.paragraphs.length;

同样的原则适用于MongoDB的原始方法,而不仅仅是流星。

答案 1 :(得分:1)

使用聚合方法和$ size的示例,以防您想知道:

var numParagraphs = Blog.aggregate([
    {
        $match : {
            "_id" : id
        }
    },
    {
        $project : {
            "pCount" : {$size : '$paragraphs'}
        }
    }
]).pCount;

答案 2 :(得分:0)

你应该做

Blog.findOne({_id:id}).paragraphs.length

由于