我在猫鼬中有以下架构:
UserSchema = new Schema
username: {type: String, required: true}
GameSchema = new Schema
identifier: String
users: [UserSchema]
我想确保游戏中的每个用户都有唯一的用户名。但是,如果我添加
unique: true
对于用户名定义,那么它似乎在所有游戏中强制执行唯一性,而不仅仅是在用户所在的游戏中。另外,如果我有超过 1 个没有用户的游戏,则会收到以下错误:
games.$users.username_1 dup key: { : null }
我尝试向用户名字段添加自定义验证器,以手动检查该用户名是否已在父游戏范围内使用,但在猫鼬中,验证器函数仅接收用户名的实际字符串,所以我没有任何办法检查用户名在游戏中是否唯一,因为我无法在验证器函数中获取对父游戏文档的引用。
有什么方法可以在猫鼬中完成这种验证吗?
正如您所发现的,向数组的字段添加唯一索引并不会强制数组内的唯一性,它可以确保不会出现两个文件集合中包含与数组中相同的字段值。
相反,看看$addToSet数组运算符作为一种将值原子地添加到数组的方法(仅当该值尚未存在于数组中时)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)