Reputation: 243
Suppose I have documents looks like this, and I want to drop info.$time
field using $unset
operator.
{
"id": 1234,
"info": {
"msg": "hello world",
"$time": Timestamp(1610515499)
}
}
I've tried
db.aggregate([
{ $unset: [ "info.$time" ] },
// next stage
])
but this gives error.
"errmsg" : "Invalid $project :: caused by :: FieldPath
field names may not start with '$'."
I also tried just "info.time"
but this doesn't actually drop the field.
Upvotes: 0
Views: 157
Reputation: 14480
As mentioned in comments fields starting with $ are unsupported.
If you are using a driver rather than MongoDB shell you should receive an error when you try inserting such data:
irb(main):006:0> a['foo'].insert_one({foo:{'$bar'=>1}})
Traceback (most recent call last):
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_supported.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 build_message'
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:in `serialize'
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:in `serialize_fields'
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_fields'
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' is an illegal key in MongoDB. Keys may not start with '$' or contain a '.'.)
Upvotes: 1