Во-первых, немного предыстории:Node.js/MongoDB/Mongoose: Buffer Сравнение
Я пытаюсь проверить, если двоичные данные изображение в уже сохранена в Монго. Учитывая следующую схему:
var mongoose = require('mongoose')
, Schema = mongoose.Schema;
var imageSchema = new Schema({
mime: String,
bin: { type: Buffer, index: { unique: true }},
uses : [{type: Schema.Types.ObjectId}]
});
module.exports = mongoose.model('Image', imageSchema);
... Я хочу, чтобы запросить, чтобы увидеть, если изображение существует, если он добавляет ссылку, что мой объект использует его, а затем обновить его. Если это не так, я хочу создать (обновить) его.
Учитывая, что он не существует, приведенный ниже код работает отлично. Если это так, то нижеследующий код не делает и добавляет еще один документ изображения в Mongo. Я чувствую, что это, вероятно, проблема сравнения для типа Mongo Buffer vs node Buffer, но я не могу понять, как правильно их сравнивать. Пожалуйста, дайте мне знать, как обновить ниже! Благодаря!
Image.findOneAndUpdate({
mime : contentType,
bin : image
}, {
$pushAll : {
uses : [ myObject._id ]
}
}, {
upsert : true
}, function(err, image) {
if (err)
console.log(err);
// !!!image is created always, never updated!!!
});
Когда вы добавили уникальный индекс? Я потратил годы, пытаясь понять, почему он допускает дубликаты, перезапуск монго и переиндексацию исправил проблему для меня после добавления уникального индекса. –
У меня был уникальный индекс, установленный в схеме, подумал я с самого начала. Но возможно, я добавил его после создания первоначальной коллекции. – guydog28