gpt4 book ai didi

node.js - Mongoose 查询改变对象顺序

转载 作者:可可西里 更新时间:2023-11-01 10:48:58 26 4
gpt4 key购买 nike

我有一个在我的 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 调试的输出是:

users.find({ 
attributes: {
'$all': [
{
deletedOn: null,
attribute: 'an id',
value: 'a value'
},
{
deletedOn: null,
attribute: 'an id again',
value: 'a value'
}
]
}
},
{ fields: {} }
)

唯一的变化是 deletedOn 字段从对象中的最后一个位置移动到第一个位置。这意味着查询不返回任何结果。

这个问题有什么解决方案吗?

最佳答案

JavaScript 中的对象属性未排序。您无法确保 JavaScript 对象上属性的顺序,不同的实现可能会对它们进行不同的排序。参见 this answer on a related question了解一些其他信息。

关键是从规范 (ECMAScript) 中我们得到:“一个对象是 Object 类型的成员。它是一个无序的属性集合,每个属性都包含一个原始值,对象或函数。存储在对象属性中的函数称为方法。”

没有“解决方案”,因为这是预期的行为。所以真正的问题是,为什么顺序对你很重要?你想做什么?

关于node.js - Mongoose 查询改变对象顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com