Я пытался выяснить, почему я получаю следующую ошибку:
MongoError: E11000 Коллекция дубликатов ошибок ключа: db_test.contentcomments index: comments.guid_1 dup ключ: {comments.guid : null}
при этом:
ContentComment.updateMany(
{},
{
$pull: { comments: { userId: userIdToDelete } }
})
Модель ContentComment
:
const Comment = new Schema({
guid: {
type: String,
unique: true,
required: true
},
userId: {
type: String,
required: true,
unique: false,
index: true
},
comment: String,
timestamp: {
type: Date,
default: new Date()
}
});
const ContentComment = new Schema({
contentGuid: {
type: String,
required: true,
unique: true,
index: true
},
comments: [Comment],
counter: {
type: Number,
default: 0,
}
});
Глядя на коллекцию в Robo3T, я вижу, что Есть четыре индекса:
{
"_id" : 1
}
{
"contentGuid" : 1
}
{
"comments.guid" : 1
}
и
{
"comments.userId" : 1
}
Для contentGuid и guid проверяется поле «уникальный».
An пример документа:
{
"_id" : ObjectId("5e1c86ba03ca187cb10456e3"),
"contentGuid" : "295582c2-a710-40ee-893a-907921dd6fcd",
"__v" : 0,
"comments" : [
{
"timestamp" : ISODate("2020-01-13T15:03:25.266Z"),
"_id" : ObjectId("5e1c86bd97adbe23d00a7cs0"),
"userId" : "f8da5e7d-8e92-4a3c-9765-f69af8bs1s81",
"comment" : "Test",
"guid" : "e700c572-85b7-42fc-8c9d-4d43esd322de"
}
],
"counter" : 1
}
Я не пытаюсь вставить какие-либо документы, как вы можете видеть. Я попытался использовать update
с multi: true
вместо этого, но получил ту же ошибку. Я также пытался получить все документы, используя find({})
, а затем перебирать документы с forEach
, используя $set
, чтобы дать ему «отфильтрованный вручную» новый массив комментариев, но я всегда получаю ту же ошибку.
Кроме того, я почти уверен, что синтаксис должен быть в порядке, потому что я успешно запустил его для другой коллекции! И я проверил все направляющие - ни один из них не одинаков.
Кто-нибудь видит что-то, что я делаю неправильно или знает, как решить эту проблему? Заранее спасибо!