mongodb update 验证嵌套文档的父代在猫鼬范围内的唯一性




mongoose详解 (2)

我在猫鼬中有以下模式:

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 }

我试图添加一个自定义的验证器到用户名字段来手动检查用户名是否已经在父游戏的范围内,但在猫鼬验证器功能只接收用户名的实际字符串,所以我没有任何办法检查用户名在游戏中是唯一的,因为我无法在验证器函数中获得对父游戏文档的引用。

有没有办法在猫鼬中完成这种验证?

https://code.i-harness.com


正如您发现的那样,向数组的字段添加唯一索引并不强制数组中的唯一性,它确保集合中没有两个文档在数组中包含相同的字段值。

相反,查看$addToSet数组运算符是一种只有在数组中尚不存在的情况下才能自动向数组添加值的方法。


这很容易通过做:

doc.array.addToSet(4,5);

你可以通过执行以下操作来删除

doc.array.pull(4,5);
doc.array.remove(4,5); //alias of .pull()

m m m m







mongoose