存储在Mongo中的数组无法与具有相同长度和值的本地javascript数组进行深度断言比较

Array stored in Mongo fails deep assert comparison to native javascript array with same length and values

本文关键字:数组 javascript 比较 断言 深度 Mongo 存储      更新时间:2023-09-26

我在mongoose中定义了一个字段,像这样:

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

如果我用mongo控制台看一下示例文档,状态看起来像

state: [ 1, 1, 1 ]

到目前为止,一切顺利。但是奇怪的是,对于同一个文档,下面的assert失败了:

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

无法确定这是我在JS中缺少的对象比较,还是与mongo返回状态数组的方式有关。

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)
}