如何在 MongoDB 中获取多个不同的字段?
How to get multiple distinct fields in MongoDB?
我正在使用 MongoDB 和 Nodejs。
例如:
Array = [{name: 'Sam', age: 26, hobby: 'Baseball'},
{name: 'Sam', age: 30, hobby: 'Baseball'},
{name: 'John', age: 26, hobby: 'Baseball'},
{name: 'Mike', age: 32, hobby: 'Baseball'},
{name: 'Max', age: 32, hobby: 'Baseball'},]
我想要一个不重复 name
和 age
的任何值并给我结果的查询 =>
[ {name: 'Sam', age: 26, hobby: 'Baseball'},{name: 'Mike', age: 32, hobby: 'Baseball'} ]
是否可以使用 MongoDB 和 Nodejs?
我检查了 distinct() 但它只需要一个填充作为查询。
您可以使用$facet
对姓名和年龄进行分类
$sort
按年龄排序
$facet
将传入数据分为两组。一个是按名字分组,一个是按年龄分组。
$setIntersection
得到两个数组的公共对象。但是请看一下
剧本是
db.collection.aggregate([
{ $sort: { age: 1 } },
{
$facet: {
nameGroup: [
{
$group: {
_id: "$name",
name: { $first: "$name" },
age: { $first: "$age" },
hobby: { $first: "$hobby" }
}
},
{ $project: { _id: 0 } }
],
ageGroup: [
{
$group: {
_id: "$age",
name: { $first: "$name" },
age: { $first: "$age" },
hobby: { $first: "$hobby" }
}
},
{ $project: { _id: 0 } }
]
}
},
{
$project: {
data: { "$setIntersection": [ "$nameGroup", "$ageGroup" ] }
}
}
])
我正在使用 MongoDB 和 Nodejs。 例如:
Array = [{name: 'Sam', age: 26, hobby: 'Baseball'},
{name: 'Sam', age: 30, hobby: 'Baseball'},
{name: 'John', age: 26, hobby: 'Baseball'},
{name: 'Mike', age: 32, hobby: 'Baseball'},
{name: 'Max', age: 32, hobby: 'Baseball'},]
我想要一个不重复 name
和 age
的任何值并给我结果的查询 =>
[ {name: 'Sam', age: 26, hobby: 'Baseball'},{name: 'Mike', age: 32, hobby: 'Baseball'} ]
是否可以使用 MongoDB 和 Nodejs?
我检查了 distinct() 但它只需要一个填充作为查询。
您可以使用$facet
对姓名和年龄进行分类
$sort
按年龄排序$facet
将传入数据分为两组。一个是按名字分组,一个是按年龄分组。$setIntersection
得到两个数组的公共对象。但是请看一下
剧本是
db.collection.aggregate([
{ $sort: { age: 1 } },
{
$facet: {
nameGroup: [
{
$group: {
_id: "$name",
name: { $first: "$name" },
age: { $first: "$age" },
hobby: { $first: "$hobby" }
}
},
{ $project: { _id: 0 } }
],
ageGroup: [
{
$group: {
_id: "$age",
name: { $first: "$name" },
age: { $first: "$age" },
hobby: { $first: "$hobby" }
}
},
{ $project: { _id: 0 } }
]
}
},
{
$project: {
data: { "$setIntersection": [ "$nameGroup", "$ageGroup" ] }
}
}
])