仅输出MongoDB中的子文档find

时间:2018-02-10 02:24:00

标签: mongodb

我有一个看起来像下面的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' } }

2 个答案:

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