如何查询MongoDB中的子子文档?
How to query a sub sub document in MongoDB?
这是我正在处理的文档示例:
{
"_id" : ObjectId("5b35019563726438989381d3"),
"ref" : "123",
"nom" : "pc",
"Revendeurs" : [
{
"revendeur" : "Tdiscount",
"selecteur_prix" : ".price",
"hist_prix" : [
{
"date" : ISODate("2018-06-28T00:00:00Z"),
"prix" : 200
},
{
"date" : ISODate("2018-06-27T00:00:00Z"),
"prix" : 100.8}
]
}
]
}
我想查询 'prix' 字段的最大值。
我还需要通过 'revendeur' 列出所有 'prix' 但是
Mongodb 仅返回空结果。
执行此查询时:
db.Tunicompare.aggregate([
{ $unwind: '$Revendeurs' },
{ $group: { _id: null, max: { $max: '$Revendeurs.hist_prix.prix' } } },
{ $project: { max: 1, _id:0 } }
])
我得到了这个结果(而不是最多只得到 200)
{ "max" : [ 200, 100.8 ] }
如果你想在外部和内部列表中找到最大值,做这样的事情(全局最大值):
db.Tunicompare.aggregate([
{ $unwind: '$Revendeurs' },
{ $unwind: '$Revendeurs.hist_prix' },
{ $group: { _id: null, max: { $max: '$Revendeurs.hist_prix.prix' } } },
{ $project: { max: 1, _id:0 } }
])
输出
/* 1 */
{
"max" : 200.0
}
与$reduce. Give it a try MongoPlayground:
db.collection.aggregate([
{
$unwind: "$Revendeurs"
},
{
$group: {
_id: null,
prixArr: {
$push: "$Revendeurs.hist_prix.prix"
}
}
},
{
$project: {
"_id": 0,
"max": {
$reduce: {
input: "$prixArr",
initialValue: 0,
in: {
$max: "$$this"
}
}
}
}
}
])
输出:
[
{
"max": 200
}
]
这是我正在处理的文档示例:
{
"_id" : ObjectId("5b35019563726438989381d3"),
"ref" : "123",
"nom" : "pc",
"Revendeurs" : [
{
"revendeur" : "Tdiscount",
"selecteur_prix" : ".price",
"hist_prix" : [
{
"date" : ISODate("2018-06-28T00:00:00Z"),
"prix" : 200
},
{
"date" : ISODate("2018-06-27T00:00:00Z"),
"prix" : 100.8}
]
}
]
}
我想查询 'prix' 字段的最大值。 我还需要通过 'revendeur' 列出所有 'prix' 但是 Mongodb 仅返回空结果。
执行此查询时:
db.Tunicompare.aggregate([
{ $unwind: '$Revendeurs' },
{ $group: { _id: null, max: { $max: '$Revendeurs.hist_prix.prix' } } },
{ $project: { max: 1, _id:0 } }
])
我得到了这个结果(而不是最多只得到 200)
{ "max" : [ 200, 100.8 ] }
如果你想在外部和内部列表中找到最大值,做这样的事情(全局最大值):
db.Tunicompare.aggregate([
{ $unwind: '$Revendeurs' },
{ $unwind: '$Revendeurs.hist_prix' },
{ $group: { _id: null, max: { $max: '$Revendeurs.hist_prix.prix' } } },
{ $project: { max: 1, _id:0 } }
])
输出
/* 1 */
{
"max" : 200.0
}
与$reduce. Give it a try MongoPlayground:
db.collection.aggregate([
{
$unwind: "$Revendeurs"
},
{
$group: {
_id: null,
prixArr: {
$push: "$Revendeurs.hist_prix.prix"
}
}
},
{
$project: {
"_id": 0,
"max": {
$reduce: {
input: "$prixArr",
initialValue: 0,
in: {
$max: "$$this"
}
}
}
}
}
])
输出:
[
{
"max": 200
}
]