如何在嵌套数组的内部定义对象数组mongoose

4

我有一个使用已经填充好的 mongoDB 的 express API,并已定义如下架构:

const accountHolderSchema= new mongoose.Schema({
  pid: {Type: Number},
  accountNumber: {type: String},
  relationshipType: {type: String},
  firstName: {type: String},
  middleName: {type: String},
  lastName: {type: String}
});

const accountsSchema = new mongoose.Schema({
  accountNumber: String,
  accountType: String,
  accountHolder: [accountHolderSchema]
});


const productDetailSchema = new mongoose.Schema({
  pid: Number,
  accounts: [accountsSchema]
});

我已经从数据库中完全复制并粘贴了所有属性,所以我知道它们是匹配的,因此我知道这不是问题所在。

我得到的响应是:

{
"pid": 2697143,
    "accounts": [
        {
            "accountHolders": [
                {
                    "pid": 13209741,
                    "accountNumber": "403716000062",
                    "relationshipType": "BENEFICIARY",
                    "firstName": "Maria",
                    "middleName": "Delores",
                    "lastName": "Jackson"
                }
             ]
            "accountNumber": "12345",
            "accountType": "RSA",
        }
     ]
}

我希望您能提供以下回复:

但我希望得到的回复是:

{
"pid": 2697143,
    "accounts": [
        {
            "accountNumber": "12345",
            "accountType": "RSA",
            "accountHolders": [
                {
                    "pid": 13209741,
                    "accountNumber": "403716000062",
                    "relationshipType": "BENEFICIARY",
                    "firstName": "Maria",
                    "middleName": "Delores",
                    "lastName": "Jackson"
                }
             ]
        }
     ]
}

我希望账户号码账户号码先于账户持有人字段出现。
我不确定是如何在另一个嵌套的数组中定义嵌套数组导致了结构问题。如果我不定义账户持有人模式,那么结构会正常返回。有任何想法吗?

尝试将accountSchema倒过来排列,听起来很蠢但也许会奏效 :) - vitomadio
代码的顺序会如何影响你的程序? - Moad Ennagi
1
JavaScript对象没有保证键的顺序,也不应该有。虽然大多数引擎确实尊重“插入顺序”,但它并不是绝对的,而且很多时候有底层代码处理事情(mongoose文档非常真实),可能会改变出现的顺序。简而言之,您真的不应该关心数据结构中键的出现顺序。如果您确实关心,那么数据应该被重新排列成一个数组,以便在您绝对需要按照某种顺序进行处理的情况下使用。 - Neil Lunn
@NeilLunn,顺序并不会影响功能,因为数据仍然会被返回。我只是希望从我的API返回的响应与我在mongoose模式中定义的文档结构匹配。 - O'Dane Brissett
好的,已经注意到了。谢谢您的建议。 - O'Dane Brissett
显示剩余2条评论
1个回答

2
如果属性的顺序对您非常重要,您可以使用一些简单的JavaScript。
循环遍历模式属性并将属性分配给一个obj
(Object.keys(obj))将返回一个带有属性的数组,然后通过从数组获取键并从文档分配值来制作组织良好的文档副本。

let schema = {
"pid": 2697143,
    "accounts": [
        {
            "accountNumber": "12345",
            "accountType": "RSA",
            "accountHolders": [
                {
                    "pid": 13209741,
                    "accountNumber": "403716000062",
                    "relationshipType": "BENEFICIARY",
                    "firstName": "Maria",
                    "middleName": "Delores",
                    "lastName": "Jackson"
                }
             ]
        }
     ]
}
let doc = {
"pid": 2697143,
    "accounts": [
        {
            "accountHolders": [
                {
                    "pid": 13209741,
                    "accountNumber": "403716000062",
                    "relationshipType": "BENEFICIARY",
                    "firstName": "Maria",
                    "middleName": "Delores",
                    "lastName": "Jackson"
                }
             ],
            "accountNumber": "12345",
            "accountType": "RSA",
        }
     ]
}

let docOrganized= {};
docOrganized.pid = doc.pid;
Object.keys(schema.accounts[0]).map(key => docOrganized[key] = doc.accounts[0][key]);
console.log(docOrganized);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接