展开具有指定字段的文档的数组

时间:2015-12-31 16:24:07

标签: mongodb

我有一个应用程序只需将XML文件转换为JSON并将它们插入Mongo数据库。在集合的每个文档中,我有一个数组VehicleEntry。其中一些VehicleEntries将有一个名为Pre-FlashDTC-IPC的标签,我想拉出所有这些条目。由于我想要数组中的各个条目,我使用了展开运算符:

db.Vehicles.aggregate( [
    { $unwind : { path : "$VehicleEntry" } },
    { $match : { "$VehicleEntry.Pre-FlashDTC-IPC" : { $exists: true } } }
] );

我已经尝试过这个,首先放松并先匹配,但都不起作用。我收到一个错误:

  

{" serverUsed":" localhost:27017"," ok":0.0," errmsg":"查询错误:BadValue未知的顶级操作符:$ VehicleEntry.Pre-FlashDTC-IPC"," code":16810}

我认为$exists运算符会确保我只返回具有该值的元素,但看起来并非如此。如何更正此查询?

请考虑以下示例文档:

{
    "VehicleEntry" : [
        {
            "BatteryStatus" : "GOOD",
            "Pre-FlashDTC-IPC" : "U100",
            "VehicleStatus" : "PASSED"
        }, 
        {
            "BatteryStatus" : "GOOD",
            "VehicleStatus" : "PASSED"
        }
    ],
    "project_id" : "1234"
}

阵列中有一些一致的信息,例如电池和车辆状态,但有些信息有第一个数组项等额外信息。我想得到这个值存在的单个数组项(因此需要展开)。因此,我的预期结果是:

{
    "BatteryStatus" : "GOOD",
    "Pre-FlashDTC-IPC" : "U100",
    "VehicleStatus" : "PASSED"
},

1 个答案:

答案 0 :(得分:4)

在比赛条款

中省略“$”
{ $match : { "VehicleEntry.Pre-FlashDTC-IPC" : { $exists: true } } }

只有在您想要访问聚合操作中字段的值时,才需要字段名称前面的$。