猫鼬用特定领域的最新文件查询$ in

时间:2020-05-03 15:53:13

标签: mongodb mongodb-query

我正在尝试使用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个文档。我该怎么做才能获得预期的查询?

2 个答案:

答案 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
    }
  }
])

这是工作示例:https://mongoplayground.net/p/rIDuXTeHg4i