我试图获取数据,以便如果没有值被分配给字段,它不应该出现在集合中。
我试过这个:
const CollectionSchema = new Schema({
field1: [{ type: String, default: undefined}],
});
OR
const CollectionSchema = new Schema({
field1: [{ type: String, default: () => undefined}],
});
字符串
这并没有工作,每当我试图创建它空field1:[]
显示。
但后来这个密码起作用了在两个给定的代码段中,创建嵌套数组时,如果没有添加数据,则不显示字段,这两个代码段有什么区别?
const CollectionSchema = new Schema({
field1: { type: [String], default: () => undefined},
});
型
2条答案
按热度按时间wwodge7n1#
使用
[{ type: String, default: undefined}]
创建一个以string为元素的field1
数组。如果没有值,你将在数组中有未定义的元素。这就是为什么它不工作。换句话说,等效代码为:
字符串
正如你所看到的,
field1
不会是undefined。使用
{ type: [String], default: () => undefined}
,您只需创建一个字符串数组。这就是为什么它有效。lp0sw83n2#
在Alternate declaration syntax for arrays文档中:
如果您创建了一个带有对象数组的模式,Mongoose会自动为您将对象转换为模式
请参见下面的示例:
字符串
两柴记录:
型
r3
是你需要的。Mongoose会将
{ type: { type: string, default: undefined } }
对象转换为schema,并将schema.$implicitlyCreated
属性设置为true
,参见源代码:型
schema1
和schema2
是等价的。模式定义意味着它们有一个field1
路径,它包含一个子文档数组。schema3
表示它有一个field1
路径,默认值为undefined
。default
模式类型是为type
路径设置默认值**而不是field1
路径。**这就是为什么当您插入新文档时,field1
始终是空数组。