如何在mongoDB中项目字段?

时间:2018-06-12 20:16:26

标签: mongodb mongodb-query aggregation-framework

我在集合中有这样的文档结构:

{
  "_id" : ObjectId("569190cd24de1e0ce2dfcd62"),
  "title" : "Star Trek II: The Wrath of Khan",
  "year" : 1982,
  "rated" : "PG",
  "released" : ISODate("1982-06-04T04:00:00Z"),
  "runtime" : 113,
  "countries" : [
    "USA"
  ],
  "awards" : {
    "wins" : 2,
    "nominations" : 9,
    "text" : "2 wins & 9 nominations."
  }
}

我正在尝试使用投影获取特定字段的内容并添加一些其他参数。我想使用指定值的titleyearratedawards这样的密钥。 (和_id删除)

我写db.movieDetails.find( {}, {title: 1, year: 2013, rated: "PG-13", _id: 0, "awards.wins": 1 }).pretty()以获取带有值的字段,但控制台显示不同的参数:

{
   "title" : "Star Trek II: The Wrath of Khan",
   "year" : 1982,
   "rated" : "PG",
   "awards" : {
     "wins" : 2,
   }
}

我希望得到这样的输出,例如:

{
   "title" : "Star Trek II: The Wrath of Khan",
   "year" : 2013,
   "rated" : "PG-13",
   "awards" : {
     "wins" : 0
   }
}

请告诉我,在查询中需要更正的内容只有我的具体要求......我感谢大家的帮助。

2 个答案:

答案 0 :(得分:1)

你可以做那样的事情

db.collection.aggregate([
  {
    $project: {
      title: 1,
      _id: 0,
      year: 2013,
      rated: "PG-13",
      "awards.wins": "0"
    }
  }
])

将提供以下输出

[
  {
    "awards": {
      "wins": "0"
    },
    "rated": "PG-13",
    "title": "Star Trek II: The Wrath of Khan",
    "year": 1982
  }
]

答案 1 :(得分:1)

过滤应该在find()函数的第一个参数内完成,投影应该在find函数的第二个参数内完成。