我有一个应用程序只需将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"
},
答案 0 :(得分:4)
在比赛条款
中省略“$”{ $match : { "VehicleEntry.Pre-FlashDTC-IPC" : { $exists: true } } }
只有在您想要访问聚合操作中字段的值时,才需要字段名称前面的$。