我正在尝试执行一个非常简单的脚本来从我的文档中删除所有空值。该文件具有以下结构:
{ "_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
答案 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:“”}})