我有一个看起来像下面的JSON的集合(集合由MapReduce查询的输出组成,所以我没有太多的灵活性来重新设计文档模式)
{ _id: '1234', value: { empId: '1234', naSales: '101000', euSales: '102000' } }
{ _id: '9820', value: { empId: '9820', naSales: '302000', euSales: '200000', asiaSales: '230000' } }
如何编写查询这样的方式只输出保存在'值中的子文档'场?
{ empId: '9820', naSales: '302000', euSales: '200000', asiaSales: '230000' }
我知道我可以collection.find({_id: 0})
来避免返回_id字段,但结果仍会嵌套。
{ value: { empId: '9820', naSales: '302000', euSales: '200000', asiaSales: '230000' } }
答案 0 :(得分:1)
您可以使用<div class="nav-menu-blocks">
<a routerLinkActive="w--current" [routerLink]="['/tutorial']" class="nav-link w-nav-link">About</a>
</div>
阶段的聚合管道将值填充为mongo 3.4 +
$replaceRoot
结果
db.col.aggregate(
[
//$match or other agg stages here
{$replaceRoot : {newRoot : "$value"}}
]
)
答案 1 :(得分:0)
使用投影和JavaScript地图功能的组合将输出转换为您想要的形状:
db.mycollection.find({}, {value: 1, _id: 0}).map(e => e.value)
该查询返回
[
{
"empId" : "1234",
"naSales" : "101000",
"euSales" : "102000"
},
{
"empId" : "9820",
"naSales" : "302000",
"euSales" : "200000",
"asiaSales" : "230000"
}
]
这是我运行该命令的环境:
~ $which mongo
/usr/local/bin/mongo
~ $mongo --version
MongoDB shell version v3.4.3
git version: f07437fb5a6cca07c10bafa78365456eb1d6d5e1
OpenSSL version: OpenSSL 1.0.2k 26 Jan 2017
allocator: system
modules: none
build environment:
distarch: x86_64
target_arch: x86_64
在此之前,我使用您提供的两个文件填充mycollection
:
db.mycollection.insert({ _id: '1234', value: { empId: '1234', naSales: '101000', euSales: '102000' } })
db.mycollection.insert({ _id: '9820', value: { empId: '9820', naSales: '302000', euSales: '200000', asiaSales: '230000' } })