我有一个类似的 struct :

class Cat {
  int id;
  List<Kitten> kittens;
}

class Kitten {
  int id;
}

我想阻止用户创建一只cat ,让它拥有多只相同id的小cat .我try 创建一个索引,如下所示:

db.Cats.ensureIndex({'id': 1, 'kittens.id': 1}, {unique:true})

但当我试图插入一只格式不正确的cat 时,Mongo接受了它.

我错过什么了吗?这能做到吗?

推荐答案

据我所知,唯一索引只在不同文档之间强制唯一性,因此这会引发重复密钥错误:

db.cats.insert( { id: 123, kittens: [ { id: 456 } ] } )
db.cats.insert( { id: 123, kittens: [ { id: 456 } ] } )

但这是允许的:

db.cats.insert( { id: 123, kittens: [ { id: 456 }, { id: 456 } ] } )

我不确定是否有任何方法可以在Mongo级别强制执行您需要的约束,也许您可以在插入更新时判断应用程序逻辑?

Mongodb相关问答推荐

如何使用ID数组对一个集合中的金额求和并更新另一个集合中的字段?

在MongoDB集合中按文档内的频率对数组排序

如何在 MongoDB 中对字段进行自定义排序

Spring Data + MongoDB GridFS 可以通过 Repository 访问吗?

MongoID find 或 find_by

MongoDB查询仅返回嵌入文档

使用 Flask-pymongo 扩展通过 _id 在 MongoDB 中搜索文档

在 Nodejs 中找不到模块

如何在 Ruby on Rails 环境中使用 Mongoid 进行通配符搜索?

启动mongodb和express的正确方法?

在 URL 中使用 ID(来自 mongo 的 ObjectId)是否安全?

在 mongodb 中查找字段的所有非不同值

如何使用 c# 2.0 驱动程序将数据插入到 mongodb 集合中?

在 MongoDB 中合并两个集合

NumberLong和简单整数之间的MongoDB区别?

使用 Jackson 与 Java Mongo DBObject 进行高效 POJO 映射

Mongoose Select 要从 findOneAndUpdate 返回的字段

单个语句中的多个 mongo 更新运算符?

mongo中的稀疏索引和空值

在 mongodb 集合中查找最旧/最新的帖子