返回介绍

$project

发布于 2024-10-04 20:57:09 字数 3841 浏览 0 评论 0 收藏 0

修改输入文档的结构。可以用来重命名、增加或删除字段(域),也可以用于创建计算结果以及嵌套文档。

思考,现有books集合内容如下:

db.books.insert(
{
  "_id" : 1,
  title: "abc123",
  isbn: "0001122223334",
  author: { last: "zzz", first: "aaa" },
  copies: 5
}
)

1. 指定输出字段

db.books.aggregate( [ { $project: { title: 1, author: 1 } } ] )

这样的话结果中就只还有_id,tilte和by_user三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:

db.books.aggregate( { $project: { _id: 0, title: 1, author: 1 } })

注:和之前讲过的投影有点像db.books.find({},{'title':1,'author':1,'_id':0})

2. 输出嵌入式文档中field

db.books.aggregate( { $project: { _id: 0, title: 1, "author.last": 1 } })
</div> 输出:

{ "title" : "abc123", "author" : { "last" : "zzz" } }

3. 改变输出结构

db.books.aggregate( { $project: { _id: 0, title: 1, "lastName": "$author.last" } })
</div> 输出:

{ "title" : "abc123", "lastName" : "zzz" }

和sql语句里面的 select author.last as lastName from books类似

4. 计算 Fields

利用 $project 新增字段 isbn, lastName, and copiesSold:

substr 语法:

{ $substr: [ <string>, <start>, <length> ] }

db.books.aggregate( [ { $project: { title: 1, isbn: { prefix: { $substr: [ "$isbn", 1, 3 ] }, }, lastName: "$author.last", copiesSold: "$copies" } } ] )
</div> 输出:

{ "_id" : 1, "title" : "abc123", "isbn" : { "prefix" : "001" }, "lastName" : "zzz", "copiesSold" : 5 }

小结:

  • 指定输出字段

    title: 1

  • 输出嵌入式文档中field

    "author.last": 1

  • 改变输出结构

    "lastName": "$author.last"

  • 计算 Fields

    prefix: { $substr: [ "$isbn", 1, 3 ] }


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文