mongodb的project如何排除上层的field name?

图片描述

上图的结构,我想去除外层的‘contact’,直接就是两个{}的数组

因为做不到上面的,我试着看看能不能获取里面一个字段,我用,{$project:{"contact.starred":1},发现外层依然有‘contact’
图片描述

怎么做才能实现目标?

阅读 2.2k
1 个回答

{$project: {starred: "$contact.starred"}}
图上没有看到有第二个数组。如果有就是同样的写法。

补充

如果想映射所有的元素,可以用$replaceRoot

{$replaceRoot: { newRoot: "$contact" }}

但是这样会丢掉除contact子文档以外的所有元素。如果想有选择性的保留,建议逐一选择你要的元素:

{
  $project: {
    _id: "$_id",
    starred: "$contact.starred",
    times_contacted: "$contact.times_contacted",
    display_name: "$contact.display_name",
    ...
  }
}

只是个形式,不用太过纠结,无论哪一种在程序里面处理也只是分分钟的事情。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题