我经常环顾四周,但我无法找到答案。它可能很容易,但我无法做到这一点。
我有一些包含一些文档的集合,在这些文档中有多个数组。
我想知道如何查询文档,然后对该文档中的特定数组进行计数。 如下所示:
db.test.find_one({"id":"test"}).count("specific_array")
结果应该只返回指定数组中的文档数量。
提前致谢。
答案 0 :(得分:0)
看一下这个帖子:
mongodb count sub-document and list totals
这是执行你想要的唯一方法......
但是,您可能可以覆盖游标方法以接受您的子文档并仅返回数组大小,但我不建议您这样做。
答案 1 :(得分:0)
将aggregate
与match
和project
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)
这不是最优的,但它确实有效,如果有人找到更好的方法我会删除这个答案并选择更好的答案!