当前位置: 首页 > 面试题库 >

mongoDB / mongoose:唯一,如果不为null

袁卓
2023-03-14
问题内容

我想知道是否有办法强制唯一的收集条目, 但前提是条目不为null 。e示例架构:

var UsersSchema = new Schema({
    name  : {type: String, trim: true, index: true, required: true},
    email : {type: String, trim: true, index: true, unique: true}
});

在这种情况下,不需要’email’,但是如果保存了’email’,我想确保该条目是唯一的(在数据库级别)。

空条目的值似乎为’null’,因此每个条目都不会通过’unique’选项使电子邮件崩溃(如果有其他用户没有电子邮件)。

现在,我正在应用程序级别解决它,但希望保存该数据库查询。

谢谢


问题答案:

从MongoDB v1.8 +开始,您可以通过sparse在定义索引时将选项设置为true 来获得确保唯一值但允许多个文档不包含字段的预期行为。如:

email : {type: String, trim: true, index: true, unique: true, sparse: true}

或在外壳中:

db.users.ensureIndex({email: 1}, {unique: true, sparse: true});

需要注意的是独特的,稀疏索引仍然不允许多个文档与email同一个字段 null,只有多个文档 没有 一个email领域。

参见http://docs.mongodb.org/manual/core/index-
sparse/



 类似资料:
  • 问题内容: 我正在运行以下MySQL查询,以查找没有手册(且车轮有黑轮等)的汽车 查询的结果看起来正确,但是它两次返回ID为27的汽车。如何更改查询,以使所有结果都是唯一的(没有重复项)? 问题答案: 假定这是唯一的主键,那么其中的一种联接将导致笛卡尔乘积。也就是说:或包含多个匹配项。 子查询通常是消除笛卡尔积的好工具。下面的示例查询显示了两种使用子查询的方法。 第一个子查询可确保我们只查看在20

  • 我构建了一个REST服务,发现使用Gson从ObjectId生成的JSON字符串的格式与Spring-Boot生成的格式不同。如果我以GSON格式将现有文档的_id字段的ObjectId发送到REST服务,并使用MongoRepository的save函数将其保存到集合中,即使在这样的字段上设置了唯一的索引,仍会插入具有duplicated_id的新文档。但是,如果我以spring-boot生成的

  • 我在学NodeJs。 为了从NodeJS连接和使用MongoDB,我看到了很多使用Monk或Mongoose的例子。 这两个库等效吗?它们是否具有相同的功能或各自有特定的用途? 作为NodeJS的初学者,我应该使用哪一种? 下面是一些使用Monk的代码示例: 这里有一个使用猫鼬的样本:

  • 问题内容: 有没有一种方法可以检查切片/映射中是否存在值? 我 只想 在切片中 不 存在值 时才 向切片添加值。 这可行,但似乎很冗长。有更好的方法吗? 问题答案: 您的方法将为每次插入花费线性时间。更好的方法是使用。另外,您也可以使用a 或类似名称,但是empty 的优点是它不占用任何额外空间。因此,是一组整数的普遍选择。 例:

  • 我有一个代表文件夹的对象集合。我想让用户创建文件夹,因为他们喜欢与应用程序将创建一个“根”文件夹(对象)的约束,我想控制这个文件夹的_id属性。根据mongoDB文档,我应该能够设置_id字段,但是当我尝试时,我得到一个错误: mongo文档说_id可以是数组以外的任何BSON数据类型,因此我不理解为什么“0”无效。为什么我不能使用“0”作为\u id? 为了清楚起见,我希望mongoDB为根文件

  • 当我尝试更新DB中的文档时,发生了一些错误。 以下是模式: 然后我从其他地方得到一些产品: 并更新Mu文档。请注意,我为“描述”设置了一个条件:如果它有空值,它将被更新——否则它将保持不变: } Go update(我使用mongoose):产品。updateOne({name:some_product.name},newProduct,{some params}) 我看到: 对于路径“descr