使用$unset的mongodb聚合丢弃子字段

使用$unset的mongodb聚合丢弃子字段,mongodb,aggregation-framework,Mongodb,Aggregation Framework,假设我有这样的文档,我想使用$unset操作符删除info.$time字段 { “id”:1234, “信息”:{ “msg”:“你好,世界”, “$time”:时间戳(1610515499) } } 我试过了 db.aggregate([ { $unset: [ "info.$time" ] }, // next stage ]) 但这是错误的 "errmsg" : "Invalid $project :: caused by ::

假设我有这样的文档,我想使用
$unset
操作符删除
info.$time
字段

{
“id”:1234,
“信息”:{
“msg”:“你好,世界”,
“$time”:时间戳(1610515499)
}
}
我试过了

db.aggregate([
  { $unset: [ "info.$time" ] },
  // next stage
])
但这是错误的

"errmsg" : "Invalid $project :: caused by :: FieldPath
field names may not start with '$'."

我还尝试了
“info.time”
,但实际上并没有删除该字段。

如注释中所述,以$开头的字段不受支持

如果您使用的是驱动程序而不是MongoDB shell,则在尝试插入此类数据时应收到一个错误:

irb(main):006:0>a['foo']。插入一个({foo:{'$bar'=>1})
回溯(最近一次呼叫最后一次):
16:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/operation/shared/sessions_受支持。rb:226:in'tap'
15:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/operation/shared/sessions_-supported.rb:231:in“block in-in-build_消息”
14:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/msg.rb:152:在“序列化”中
13:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/message.rb:192:in“serialize”
12:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/message.rb:331:在“序列化”字段中
11:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/message.rb:331:in'each'
10:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/message.rb:343:in`block in serialize_字段'
9:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:187:in“serialize”
8:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:187:in'each'
7:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:194:in`block in serialize'
6:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:316:in“serialize”
5:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:316:in'each'
4:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:317:in`block in serialize'
3:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mongo-2.14.0/lib/mongo/protocol/serializers.rb:358:in“serialize”
2:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bson-4.11.1/lib/bson/hash.rb:42:in“to_bson”
1:from/home/w/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/bson-4.11.1/lib/bson/hash.rb:42:in'put_hash'
BSON::String::IllegalKey(“$bar”在MongoDB中是非法密钥。密钥不能以“$”开头或包含“.”。)

是否要从集合中永久删除该字段?或者只需要从结果中删除?请参阅。将字段名以美元
$
符号开头是一个非常糟糕的主意,尽管这可能是可行的。