Mongodb 找到计数 > 5 的地方
Mongodb find where count > 5
我有一个名为 caminhos
的集合,如以下文档:
"_id" : ObjectId("54e2aa2f71defd010b1caf5c"),
"data" : "2015-02-17 12:40:47",
"rua" : "Rua Caperuçu, 119–211",
"horario" : "12:40:47",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.6452,
-23.60894
]
},
"id_usuario" : "54bef57a14b88ad70a8ab74e" }
/* 32 */ {
"_id" : ObjectId("54e387d371defd010b1caf5d"),
"data" : "2015-02-17 04:26:27",
"rua" : "Rua Camaipi, 1–83",
"horario" : "04:26:27",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.63184,
-23.47975
]
},"id_usuario" : "54bef57a14b88ad70a8ab74e" }
/* 33 */ {
"_id" : ObjectId("54e387d471defd010b1caf5e"),
"data" : "2015-02-17 04:26:27",
"rua" : "Rua Camaipi, 1–83",
"horario" : "04:26:27",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.63179,
-23.47985
]
},"id_usuario" : "54bef57a14b88ad70a8ab74e" }
/* 34 */ {
"_id" : ObjectId("54e387d471defd010b1caf5f"),
"data" : "2015-02-17 04:26:27",
"rua" : "Rua Camaipi, 1–83",
"horario" : "04:26:27",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.63177,
-23.47987
]
},"id_usuario" : "54bef57a14b88ad70a8ab74e" }
我需要将具有 id_usuario = 54bef57a14b88ad70a8ab74e
and
相同 rua
值 and
不同 data
值和 find/select 的所有文档分组count>5
这似乎是一个相当基本的问题,您可以使用 aggregation pipeline using $group
and $match
运算符解决它以获得您想要的结果。
db.caminhos.aggregate([
{ $match: { id_usuario: "54bef57a14b88ad70a8ab74e" } },
{ $group: { _id: { rua: "$rua", data: "$data" } } },
{ $group: { _id: "$_id.rua", data: { $push: "$_id.data" }, count: { $sum: 1 } } },
{ $match: { count: { $gt: 5 } } }
])
我有一个名为 caminhos
的集合,如以下文档:
"_id" : ObjectId("54e2aa2f71defd010b1caf5c"),
"data" : "2015-02-17 12:40:47",
"rua" : "Rua Caperuçu, 119–211",
"horario" : "12:40:47",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.6452,
-23.60894
]
},
"id_usuario" : "54bef57a14b88ad70a8ab74e" }
/* 32 */ {
"_id" : ObjectId("54e387d371defd010b1caf5d"),
"data" : "2015-02-17 04:26:27",
"rua" : "Rua Camaipi, 1–83",
"horario" : "04:26:27",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.63184,
-23.47975
]
},"id_usuario" : "54bef57a14b88ad70a8ab74e" }
/* 33 */ {
"_id" : ObjectId("54e387d471defd010b1caf5e"),
"data" : "2015-02-17 04:26:27",
"rua" : "Rua Camaipi, 1–83",
"horario" : "04:26:27",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.63179,
-23.47985
]
},"id_usuario" : "54bef57a14b88ad70a8ab74e" }
/* 34 */ {
"_id" : ObjectId("54e387d471defd010b1caf5f"),
"data" : "2015-02-17 04:26:27",
"rua" : "Rua Camaipi, 1–83",
"horario" : "04:26:27",
"localizacao" : {
"type" : "Point",
"coordinates" : [
-46.63177,
-23.47987
]
},"id_usuario" : "54bef57a14b88ad70a8ab74e" }
我需要将具有 id_usuario = 54bef57a14b88ad70a8ab74e
and
相同 rua
值 and
不同 data
值和 find/select 的所有文档分组count>5
这似乎是一个相当基本的问题,您可以使用 aggregation pipeline using $group
and $match
运算符解决它以获得您想要的结果。
db.caminhos.aggregate([
{ $match: { id_usuario: "54bef57a14b88ad70a8ab74e" } },
{ $group: { _id: { rua: "$rua", data: "$data" } } },
{ $group: { _id: "$_id.rua", data: { $push: "$_id.data" }, count: { $sum: 1 } } },
{ $match: { count: { $gt: 5 } } }
])