【问题标题】:How to define array of objects in side nested array mongoose [duplicate]如何在侧面嵌套数组猫鼬中定义对象数组[重复]
【发布时间】:2019-08-30 01:39:20
【问题描述】:

我有一个使用已经填充的 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"
                }
             ]
        }
     ]
}

我希望 accountNumberaccountNumber 出现在 accountHolders 字段之前。

我不确定它是否是我在抛出结构的另一个嵌套数组中定义嵌套数组的方式。如果我不定义 accountHolderSchema 结构返回正常。有什么想法吗?

【问题讨论】:

  • 尝试向后重新排列 accountSchema,听起来很愚蠢,但也许可行 :)
  • @vitomadio 不起作用
  • 订单对您的代码有何影响?
  • JavaScript 对象没有保证键的顺序,也不应该。虽然大多数引擎确实尊重“插入顺序”,但它不是绝对的,而且经常有底层代码处理事情(对于猫鼬文档来说非常正确)可能会改变出现的顺序.简而言之,您真的不应该关心数据结构中出现的顺序键。如果您关心,则应将数据重新排列到一个数组中,以便按一定顺序进行处理。
  • @NeilLunn 订单并没有真正影响功能,因为数据仍在返回。我只是希望从我的 api 返回的响应与我在 mongoose 模式中定义的文档结构相匹配。

标签: javascript node.js mongoose mongoose-schema


【解决方案1】:

如果属性的顺序对您来说真的很重要,您可以使用一些简单的 JavaScript。
循环遍历您的 Schema 属性并将这些属性分配给 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2019-09-30
    • 2021-08-23
    • 2020-08-09
    • 2019-07-14
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多