【发布时间】:2018-01-14 18:48:29
【问题描述】:
我有一个在我的 Node 后端生成的查询 - 如果我将其注销并在 Mongo shell 中运行它,那么一切都很好,但是,如果我使用 mongoose 来执行Model.find(query),那么会出现一些奇怪的属性重新排序发生并且查询中断。
有问题的查询是:
{
"attributes": {
"$all": [
{
"attribute": "an id",
"value": "a value",
"deletedOn": null
},
{
"attribute": "an id again",
"value": "a value",
"deletedOn": null
}
]
}
}
然而,mongoose debug 的输出是:
users.find({
attributes: {
'$all': [
{
deletedOn: null,
attribute: 'an id',
value: 'a value'
},
{
deletedOn: null,
attribute: 'an id again',
value: 'a value'
}
]
}
},
{ fields: {} }
)
唯一的变化是将deletedOn 字段从对象中的最后一个位置转移到第一个位置。这意味着查询不返回任何结果。
这个问题有解决办法吗?
【问题讨论】:
-
mongoosejs.com/docs/guide.html#retainKeyOrder(虽然我不确定这是否适用于
$all)。 -
“retainKeyOrder 选项已被移除,mongoose 现在在克隆对象时将始终保留相同的键位置。如果您有依赖于反向键顺序的查询或索引,则必须更改它们。” mongoosejs migrating to 5.x - retain-key-order