【问题标题】:_id is pushed to the array instead of object_id 被推送到数组而不是对象
【发布时间】:2021-12-03 08:43:15
【问题描述】:

我的设置是带有 typescript + mongoose + express 的 nodejs。我运行我的 mongoose 查询,我得到了一个 2 层深的 league 文档。我需要根据某些标准重新排序位于我的第一级的填充数组ties,然后执行以下代码

                        const completed = [];
                        const upcoming = [];

                        league.ties.forEach((tie, index) => {
                            if (tie) {
                                tie?.matchStatus === "COMPLETED"
                                    ? completed.push(tie)
                                    : upcoming.push(tie);
                            }
                        });

                        upcoming.sort((a, b) => (a.startDate > b.startDate) ? 1 : ((b.startDate > a.startDate) ? -1 : 0));
                        completed.sort((a, b) => (b.startDate > a.startDate) ? 1 : ((a.startDate > b.startDate) ? -1 : 0));

                        const ties = [...upcoming, ...completed];
                        console.log(ties);

                        league.ties = ties;

                        console.log(league.ties);

第一个 console.log ties 是对象数组,但第二个 console.log league.ties_ids 数组(字符串)。

有人知道这里为什么会发生这种情况以及为什么没有推送对象吗?

我尝试了循环、地图、lodash...我暂时将此代码移至客户端 Angular 应用程序,它运行良好。

谢谢

【问题讨论】:

    标签: node.js typescript mongoose


    【解决方案1】:

    我的猜测是league.ties 属性已定义为writeable: false(只读)。当严格模式关闭时,它不会抛出任何错误,但值也不会改变。

    你可以看看这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

    【讨论】:

    • 我没有在任何地方明确设置它,老实说,我以前从未使用过它。关于如何修复它的任何建议?
    • 它应该由库供应商设置。您可以分配给自己的自定义属性,例如 league._ties 吗?如果对象被冻结 (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)。我认为唯一的方法是分配给新变量。
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多