获取Pymongo中特定文档的数组计数

时间:2016-04-19 12:11:57

标签: python arrays python-2.7 pymongo

我经常环顾四周,但我无法找到答案。它可能很容易,但我无法做到这一点。

我有一些包含一些文档的集合,在这些文档中有多个数组。

我想知道如何查询文档,然后对该文档中的特定数组进行计数。 如下所示:

    db.test.find_one({"id":"test"}).count("specific_array")

结果应该只返回指定数组中的文档数量。

提前致谢。

3 个答案:

答案 0 :(得分:0)

看一下这个帖子:

mongodb count sub-document and list totals

这是执行你想要的唯一方法......

但是,您可能可以覆盖游标方法以接受您的子文档并仅返回数组大小,但我不建议您这样做。

答案 1 :(得分:0)

aggregatematchproject

一起使用
db.test.aggregate([{$match : {id: "test"}},{$project: {count : {$size : "$specific_array"}, specific_array: "$specfic_array"}}])

它将返回与过滤器{id: "test"}匹配的多个文档。结果文档仅包含$project中指定的字段。

答案 2 :(得分:0)

因为我找不到任何有用的功能,我决定只使用Python。 只返回我使用的数组:

        let alert:UIAlertController=UIAlertController(title: "Choose Image", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
        let cameraAction = UIAlertAction(title: "Camera", style: UIAlertActionStyle.Default)
        {
            UIAlertAction in
            self.openCamera()

        }
        let gallaryAction = UIAlertAction(title: "Gallary", style: UIAlertActionStyle.Default)
        {
            UIAlertAction in
            self.openGallary()
        }
        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel)
        {
            UIAlertAction in

        }
        // Add the actions
        picker?.delegate = self
        alert.addAction(cameraAction)
        alert.addAction(gallaryAction)
        alert.addAction(cancelAction)
        // Present the controller
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone
        {
            self.presentViewController(alert, animated: true, completion: nil)
        }
        else
        {
            popover=UIPopoverController(contentViewController: alert)
            popover!.presentPopoverFromRect(btnClickMe.frame, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)
        }

然后我把它转换成了一个字符串:

result = db.test.find_one({"id":"test"},{'_id':0, 'specific_array':1})

之后我需要知道长度,如果长度是> 16我发了命令。

strresult = str(result)

这不是最优的,但它确实有效,如果有人找到更好的方法我会删除这个答案并选择更好的答案!