Странное поведение с полями mongodb начинается с $

В этом посте MongoDB обнаруживает вложенные элементы , автор утверждает, что структура документа mongodb

      car : { "$ref" : "cars" , "$id" : { "$oid" : "4e8478ace4b0dea06288ad63"}}

Когда я пытался воспроизвести проблему , я столкнулся с некоторыми странными действиями при вставке mongodb

. При запуске вставки для приведенных выше примеров данных я получил следующую ошибку

> db.sample.insert({car:{ "$ref" : "cars" , "$id" : { "$oid" : "4e8478ace4b0dea06288ad63"}}})
Tue Jan 24 14:09:07 uncaught exception: field names cannot start with $ [$oid]

, в которой говорится, что имена полей не могут начинаться с $ .

Если это так, он не должен работать, если я удалю $ из oid и оставлю оставшиеся $ ref & $ id нетронутыми

    > db.sample.insert({car:{ "$ref" : "cars" , "$id" : { "oid" : "4e8478ace4b0dea06288ad63"}}})
    > db.sample.find()
{ "_id" : ObjectId("4f1e6fbc403aae757ec6dea5"), "car" : { "$ref" : "cars", "$id" : { "oid" : "4e8478ace4b0dea06288ad63" } } }

на удивление это сработало. Теперь он принимает поля, начинающиеся с $

. Также, когда я попробовал этот запрос

> db.sample.insert({ "$ref" : "cars" })
document to insert can't have $ fields

, я получил сообщение об ошибке.

Я не понимаю, чем это вызвано? у кого-нибудь есть четкое представление?

5
задан Community 23 May 2017 в 12:00
поделиться