在查看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": { ....我知道每次"LOG-11-05-SH-O1.mp4"出现在显示屏0下时,"display.0.Name" : "LOG-11-05-SH-O1.mp4"都会计数,但有时这个数字可能会改变。例如,下一次时间日志可能显示为1。因此,有没有办法只对“"LOG-11-05-SH-O1.mp4" -11-05-SH-O1.mp4”执行计数,或者忽略中间的数字?
发布于 2014-01-20 21:14:23
请看我对您的问题的评论,但是如果不使用数组而不是对象来表示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上的相关MongoDB页面:http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/。
如果您必须保留对象模式,那么您可以获取所有记录并在应用程序端进行计数,而不是在MongoDB中。
如果其他人知道如何在不使用数组的情况下做到这一点,我很高兴收到反对票,然后删除不正确的答案。
发布于 2014-01-21 10:14:53
一开始没有意识到这一点,我觉得有点傻。答案很简单:
"display.Name": "LOG-11-05-SH-O1.mp4"
这将在display下查找具有以下名称的所有条目。
https://stackoverflow.com/questions/21230673
复制相似问题