从嵌入的文档中删除字段

时间:2018-02-07 10:21:26

标签: javascript mongodb

我正在尝试执行一个非常简单的脚本来从我的文档中删除所有空值。该文件具有以下结构:

{ "_id" : ObjectId("5a75caa4ce7a49e7d8474a40"), 
"icao" : "MLA", 
"name" : "40-Mile Air", 
"callsign" : "MILE-AIR", 
"country" : "US", 
"alid" : 10, 
"mode" : "F", 
"active" : "Y", 
"routes" : [ { "codeshare" : "", 
    "dst_ap" : "TKJ", 
    "dst_apid" : 7235, 
    "equipment" : "CNA", 
    "rid" : 46585 } ]

我正在执行的脚本是:

db.airlines.updateMany(
{ codeshare: "" },
{ $unset: {codeshare : 1}},
)

然而,在运行后我收到此错误:

2018-02-07T10:17:35.634+0000 E QUERY    [thread1] SyntaxError: missing : after property id @(shell):3:21

2 个答案:

答案 0 :(得分:1)

$unset运算符与更新中的$ positional operator一起应用,以删除嵌入的codeshare字段。

$ positional operator将标识要更新的数组中的正确元素,而不显式指定数组中元素的位置,因此最终更新语句应如下所示:

db.airlines.updateMany(
    { "routes.codeshare": "" }, 
    { "$unset": { "routes.$.codeshare": 1 } }
)

对于数组中的多个元素,请使用过滤后的位置运算符 $[<identifier>] ,它标识与arrayFilters条件匹配的数组元素:

db.airlines.updateMany(
   { "routes.codeshare": "" }, 
   { "$unset": { "routes.$[element].codeshare" : 1 } },
   { "arrayFilters": [ { "element.codeshare": "" } ] }
)

答案 1 :(得分:0)

试试这个:

db.airlines.update({name:“40-Mile Air”},{$ unset:{codeshare:“”}})