繁体   English   中英

不了解猫鼬架构数组语法

[英]Not understanding mongoose schema array syntax

我在以猫鼬模式围绕以下语法时遇到麻烦。

tokens:[{
        token:{
            type: 'String',
            required: true
        }
    }]

通常,当我想将对象添加到数组中时,我只会推送对象。 这包括是否要像下面的示例一样将带有内部对象的对象推入所述数组。

let obj =[]
obj.push({name: 'dirk', age: 24})
obj.push({name: 'chris', age:29, clothes: {shirt: 'black', pants: 'jeans'}, height: '6ft'})

我对猫鼬感到困惑,为什么我需要使用此语法[{}]来使用数组?

好的,我会尽力解释这一点。 在基本的JavaScript中,由于缺少更好的单词,数组只是“东西”的一个桶。 这意味着,您可能会遇到以下情况:

let myList = []
myList.push({name: "John Doe", age: 20})
myList.push({car: {make: "Honda", model: "Accord"}})
myList.push({menu_items: ["item 1", "item 2", "item 3"]})

JavaScript真的不会在乎吗? 就您而言,您没有做错任何事情,因为您在技术上做了正确的事,将一些对象放入可以容纳您想要的任何内容的列表中。

猫鼬,这是一个ORM(如果您以前从未听说过,请查看该术语),它要求事情更加严格。 请记住,Mongoose尝试将Mongo数据库中的文档映射到该“对象”,该文档应该是标准的,并且可以在代码的任何位置以相同的方式读取。 因此,在上面列出的问题示例中:

tokens:[{
    token:{
        type: 'String',
        required: true
    }
}]

您对猫鼬说,它应该期望tokens包含具有特定设计的token对象列表。 现在,当您要将更多token对象添加到tokens列表时,可以执行以下操作:

token = { 
    // YOUR CORRECT TOKEN DATA
}

tokens.push(token);

如果您尝试执行以下操作:

token = { 
    // RANDOM WRONG DATA
}

tokens.push(token);

猫鼬不会善待它,因为您违反了您告诉猫鼬保持情感的约束。 如果您开始向混音中添加any: [{}] ,则告诉Mongoose任何旧对象都将对该列表起作用。 我认为这样做非常危险,因为如果列表中有两种类型的对象:

var schema1 = new Schema({
   name:    String,
   age:  { type: Number, min: 18, max: 65 },
   living:  Boolean
})

var schema2 = new Schema({
   name:    String,
   age:  { type: Number, min: 18, max: 65 },
   breed:  Boolean
})

而你与合并这两个对象,如果你想抓列表工作说breedschema1类型的对象,你要么得到一个错误或者可能破坏你的代码的奇数值。 因此,Mongoose严格将要推送到列表中的对象类型化,除非您使用Mixedany类的东西。 这是指向文档的链接,也可能会有所帮助

https://mongoosejs.com/docs/schematypes.html#arrays

如果这样做没有意义,或者我解释得不好,或者回答了错误的问题,请发表评论,我将对其进行修复,以尽我所能解释。

快乐的编码:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM