Основная проблема, конечно, заключается в предоставлении _id
, но вам также необходимо установить поле "count"
.Использование $setOnInsert
, вероятно, то, что вам нужно:
db.getCollection('placeFollow').update(
{ "count":{"$lt":2} },
{
"$set":{ "data": "check" },
"$setOnInsert": { "count": 2 }
},
{"upsert":true}
)
Так что вам нужно сделать что-то подобное с любыми данными «по умолчанию» или другими ожидаемыми данными.В противном случае MongoDB не найдет документ, потому что поле не существует, и попытается вставить с тем же значением _id
, как указано.
Поскольку ваш код в настоящее время неверен, вам нужно удалить документ, который был создан без "count"
first:
db.getCollection('placeFollow').deleteOne(
{ "_id":ObjectId("5af19959204438676c0d5268") }
)
Либо так, либо установите все документы со значением по умолчанию `count.
Но в принципе вы не можете использовать и" первичный ключ ", и другое условие при использовании"upsert ", потому что если документ не удовлетворяет условию, тогда предпринимается попытка upsert, и, конечно, существующее значение для _id
является уникальным.