【发布时间】:2017-08-16 09:04:20
【问题描述】:
情况: 我有几个相同集合(帐户)的文档,每个文档都有一个名为 uniquestrings 的数组(字符串)类型的属性。
问题: uniquestrings 中的每个条目在 mongodb 中的所有文档中都必须是唯一的。似乎 MongoDB/Mongoose 不提供这样的验证(addToSet¹ 和 index: {unique: true}² 都没有解决问题)。是否有一种模式来重组我的文档模式以确保 mongodb 本身可以验证它?目前,软件本身会在更新文档之前对其进行检查。
例如
account {
_id: 111,
uniquestrings: ["a", "b", "c"]
}
account {
_id: 222,
uniquestrings: ["d", "e", "f"]
}
例如通过从 mongo 抛出重复错误来防止 account(222).uniquestrings.push("a");。
¹数组中的唯一性是不够的
² 数组中的每个项目在集合中必须是唯一的
更新1:
更多示例。受影响的 Schema 条目如下所示:
var Account = new Schema({
...
uniquestrings: [{type: String, index: {unique: true}}]
...
});
现在创建 4 个帐户文件。我只希望 1 和 2 正常,休息应该失败。
var accountModel1 = new Account.Model({uniquestrings: ["a", "b"]});
accountModel1.save(); // OK
var accountModel2 = new Account.Model({uniquestrings: ["c", "d"]});
accountModel2.save(); // OK
var accountModel3 = new Account.Model({uniquestrings: ["c", "d"]});
accountModel3.save(); // FAIL => Not unique, so far so good
var accountModel4 = new Account.Model({uniquestrings: ["X", "d"]});
accountModel4.save(); // OK => But i Want this to faile because "d" is alreay in use.
【问题讨论】:
-
我不确定问题出在哪里......我刚刚做了一些测试,它在唯一索引(使用 mongo shell)下运行良好。能发一下有问题的js代码吗?
-
您是如何创建索引的?