Я использую node-mongodb-native в качестве драйвера MongoDb для моего приложения Node.js. Вот моя функция вставки:
async create(data) {
return new Promise((resolve, reject) => {
const datetime = Date.parse(new Date());
data._id = new ObjectID().toString();
data.createdAt = datetime;
data.updatedAt = datetime;
data.deleted = false;
this._db.collection(this._table).ensureIndex({ 'body.flowid': 1 },
{ unique: true, dropDups: true, sparse: true },
async (err) => {
if (err) { return reject('Duplicate phone number'); }
try {
await this._db.collection(this._table).insertOne(data);
return resolve(data);
} catch (error) {
return reject(error.message);
}
});
});
}
С разреженным индексом в поле 'body.flowid я должен индексировать это поле только тогда, когда оно существует в документе. Затем я попытался вставить в коллекцию два документа с одинаковыми body.flowid. Ни одна из двух вставок не удалась. Выдал такую ошибку:
Но после этого, когда я попытался получить индексы этой коллекции. Я не мог найти его!
Я не понимаю, что здесь произошло. Как это исправить?





ensureIndexустарела, используйтеcreateIndex.dropDupsустарела много лет назад и фактически была удалена.body.flowIdзвучит подозрительно, как будто мощь является полем внутри массива, и в этом случаеuniqueиндексы не должны создаваться для массивов. В любом случае, любые данные на этом пути будут отрицатьsparse. Покажите несколько образцов документов, к которым это относится, если вы все еще не уверены.