我正在尝试使用find()在MongoDB中查询文档,但是无法获得我想要的文档。说我们有文件
Pet = [
{project: "foo", date: 11111, data: "Lion"},
{project: "bar", date: 1111, data: "Tiger"},
{project: "foo", date: 2222, data: "Cat"},
{project: "bee", date: 3333, data: "Rat"},
{project: "pet", date: 4444, data: "Cow"},
{project: "yeti", date: 2233, data: "Dog"}, ...];
然后,我只想在[“ foo”,“ pet”]数组中查询每个项目的1个文档。从这个示例数据中,我希望得到
[{project: "foo", date: 11111, data: "Lion"},
{project: "pet", date: 4444, data: "Cow"}]
我尝试
Pet.find({project: {$in: ["foo","pet"]}, {},{ sort: { date: -1 },limit: 1});
当我将限制设置为1时,我只能得到1个文档。我该怎么做才能获得预期的查询?
答案 0 :(得分:0)
如果我正确理解了您的问题,这可能会有所帮助。
假设:您有一个名为projects的集合,其中包含示例中的字段。
db.projects.aggregate(
[
{ $match: { project: { $in: [ "foo","pet" ] } } },
{ $sort: { project: 1, date: 1 } },
{
$group:
{
_id: "$project",
firstProject: { $first: "$date" }
}
}
] )
注意:您可以在汇总的$ group部分中发挥更多的作用,以显示该组中的其他记录
答案 1 :(得分:0)
您必须使用聚合
db.collection.aggregate([
{
"$match": {
"project": {
"$in": [
"pet",
"foo"
]
}
}
},
{
"$group": {
"_id": "$project",
"date": {
"$first": "$date"
},
"data": {
"$first": "$data"
}
}
},
{
"$project": {
"date": 1,
"data": 1
}
},
{
"$sort": {
"date": -1
}
}
])