在查看Mongo Count docs后,它显示以下代码:
// Peform a partial account where b=1
collection.count({b:1}, function(err, count) {
它计算每个b:1的文档。这些文件看起来像这样
{
a:1,
b:1,
c:1
}
如何在更深入的级别找到部分帐户。例如,请考虑以下文档。如何计算包含
"Name": "LOG-11-05-SH-O1.mp4"
的每个文档?
"display": {
"0": {
"Name": "LOG-11-05-SH-O1.mp4",
"Type": "Startup",
"Count": "2",
"Detail": {
"0": {
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
},
"1": {
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
}
}
},
"1": { ....
我知道"display.0.Name" : "LOG-11-05-SH-O1.mp4"
每次"LOG-11-05-SH-O1.mp4"
都会在显示0下显示,但有时数字可能会改变。例如,下次时间"LOG-11-05-SH-O1.mp4"
可能会显示1.因此有没有办法仅对“LOG-11-05-SH-O1.mp4”执行计数或者忽略中间数?
答案 0 :(得分:1)
请参阅我对您的问题的评论,但如果不使用数组而不是使用display
的值的对象,我看不到这样做的方法。如果它是一个数组,这就变得微不足道了。
假设您的数据如下所示:
"display": {[
{
"Name": "LOG-11-05-SH-O1.mp4",
"Type": "Startup",
"Count": "2",
"Detail": {
"0": {
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
},
"1": {
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
}
}
, { ....}
]}
然后你只是查询:
db.foos.count({"display": {$elemMatch: { "Name" : "LOG-11-05-SH-O1.mp4"}}})
以下是$ elemMatch:http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/上的相关MongoDB页面。
如果您必须保留对象架构,那么您可以获取所有记录并在应用程序端而不是在MongoDB中进行计数。
如果其他人知道如何在没有阵列的情况下解决此问题,我很高兴收到一个downvote,然后删除那些不正确的答案。
答案 1 :(得分:0)
我一开始并没有意识到这一点。答案很简单:
"display.Name": "LOG-11-05-SH-O1.mp4"
这将查找显示中具有以下名称的所有条目。