我正在为一个mongo文档创建模式,除了防止非对象数组中的重复之外,我可以做任何事情。
我知道addToSet,但我指的是Mongo模式。
我不想使用$addToSet检查Update,而是希望它成为模式验证的一部分。
示例如下。
let sampleSchema = {
name: { type: 'String', unique: true },
tags: [{ type: 'String', unique: true }]
}
上面的代码片段防止name有重复的值。它允许标记存储为字符串数组。
但是..我不能限制数组为唯一字符串。
{ name: 'fail scenario', tags: ['bad', 'bad', 'array']}
我能够插入此记录,这应该是一个失败的场景。
5条答案
按热度按时间pwuypxnk1#
ws51t4hk2#
我得出的结论是,这是不可能通过 Mongoose 模式。
JSON模式是这样完成的。
在创建Mongo文档之前,我将使用JSON模式进行验证。
dvtswwa33#
这个方法建立在Med的答案上,处理引用,并且完全在方案验证中完成。
nzk0hqpo4#
我有点晚了,但也许这对将来的人有帮助。
上面的注解代码应该是非常不言自明的。
lsmepo6l5#
在MongoDB的更新版本中,当且仅当新值与数组中的元素相比是唯一的时,才可以使用
$addToSet
追加到数组中。参考资料如下:https://www.mongodb.com/docs/manual/reference/operator/update/addToSet/
下面是一个例子:
如果
tags
数组中还没有"新标签",这将有效地更新标签。否则,不执行任何操作。