Как избежать $ при вставке внутри mongoDB - PullRequest
0 голосов
/ 06 мая 2019

У меня есть большой объект, который я не могу контролировать, поля могут сильно различаться:

Ошибка == >> {MongoError: Поле с префиксом доллара ($) '$' в 'Значение.external.originalRequest.rawRequest.ns2: LoadData.Orders.0.Order.0.TotalThirdPartyCharge.0.CurrencyValue.0. $ 'недопустимо для хранилища.0 | lt-check |в Function.MongoError.create (/home/ops/lt-checkin-api/node_modules/mongodb-core/lib/error.js:31:11) 0 | lt-check |по адресу /home/ops/lt-checkin-api/node_modules/mongodb-core/lib/connection/pool.js:497:72 0 | lt-check |at authenticateStragglers (/home/ops/lt-checkin-api/node_modules/mongodb-core/lib/connection/pool.js:443:16) 0 | lt-check |в Connection.messageHandler (/home/ops/lt-checkin-api/node_modules/mongodb-core/lib/connection/pool.js:477:5) 0 | lt-check |на сокете.(/home/ops/lt-checkin-api/node_modules/mongodb-core/lib/connection/connection.js:333:22) 0 | lt-check |в Socket.emit (events.js: 159: 13) 0 | lt-check |в addChunk (_stream_readable.js: 265: 12) 0 | lt-check |at readableAddChunk (_stream_readable.js: 252: 11) 0 | lt-check |в Socket.Readable.push (_stream_readable.js: 209: 10) 0 | lt-check |в TCP.onread (net.js: 608: 20) 0 | lt-check |имя: 'MongoError', 0 | lt-check |сообщение: 'Поле с префиксом $ ($) в \' $ \ 'в \' value.external.originalRequest.rawRequest.ns2: LoadData.Orders.0.Order.0.TotalThirdPartyCharge.0.CurrencyValue.0. $ \ 'равнонедопустимо для хранения. ', 0 | lt-check |ok: 0, 0 | lt-check |
errmsg: 'Поле с префиксом доллара ($) \' $ \ 'in \' value.external.originalRequest.rawRequest.ns2: LoadData.Orders.0.Order.0.TotalThirdPartyCharge.0.CurrencyValue.0. $ \ 'Недопустимо для хранилища.', 0 | lt-check |код: 52, 0 | lt-check |
codeName: 'DollarPrefixedFieldName'}

Здесь ключ, вызывающий ошибку:

"rawRequest": {
                        "ns2:LoadData": {
                            "$": {
                                "xmlns:ns2": "http://schemas.3gtms.com/tms/v1/tns"
                            },
                            "BatchInfo": [
                                {
                                    "$": {
                                        "xmlns": ""
                                    },

Поскольку запускается несколько ключейс $.

Есть ли в mongoose или mongoDB параметр для вставки чего-либо без проверки входящего запроса.

1 Ответ

0 голосов
/ 06 мая 2019

собирался создать новый плагин, но @Anirudh помог мне найти этот пакет в комментарии

https://www.npmjs.com/package/mongo-escape

Чтобы использовать его, непосредственно перед тем, как ваш запрос вставки покинет ваш объект, используяПакет выше.

var escapeForMongo = require('mongo-escape').escape;
userInput = escapeForMongo({
  'foo': 'bar',
  'ba.z': {
    '$in': 'quz'
  }
})
...