Массив, сохраненный в Mongo, не может выполнить глубокое сравнение утверждений с собственным массивом JavaScript с такой же длиной и значениями - PullRequest
1 голос
/ 16 сентября 2011

У меня есть поле в mongo, определенное с помощью mongoose ORM, например:

state: {type: [Number], required: true }

Если я взгляну на образец документа с помощью консоли mongo, состояние будет выглядеть как

state: [ 1, 1, 1 ]

Пока все хорошо.Но, как ни странно, для этого же документа следующее утверждение не выполняется:

assert.deepEqual state, [ 1, 1, 1 ]

Не могу понять, что это - что-то, чего мне не хватает при сравнении объектов в JS или как-то связано со способом, которым монго возвращаетмассив состояний.

1 Ответ

0 голосов
/ 08 июля 2014

MongoDB содержит ошибку, при которой перечисляются свойства, которые не должны быть перечисляемыми:

Например, массив, значения которого:

[ '0', '1']

имеет следующие ключи, в соответствии с Object.keys():

[ '0', '1', '_atomics', 'validators', '_path', '_parent', '_schema' ]

Примечание. В Mongo теперь используется V8, поддерживающий ES5, который может создавать не перечисляемые свойства с помощью Object.defineProperty () в течение многих, многих лет .

Как упоминает другой автор:

var fixMongoArray = function(array) {
  return Array.prototype.slice.call(array)
}
...