#node.js #mongodb #mongoose #mongoose-schema
#node.js #mongodb #мангуст #мангуст-схема
Вопрос:
Я пытаюсь сохранить координаты щелчка в базе данных, но если x и y совпадают, я не хочу их сохранять. Даже если я использую составной индекс и делаю все по книге, это все равно сохраняет все. Аналогичный вопрос есть в stackoverflow, но он не работает для моего кода.
Модель, схема:
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
require('mongoose-double')(mongoose);
var Schema = mongoose.Schema;
var integerValidator = require('mongoose-integer');
var SchemaTypes = mongoose.Schema.Types;
var clickPoint = new Schema({
clicks: [
{
x: {
type: SchemaTypes.Double
},
y: {
type: SchemaTypes.Double
},
value: {
type: Number,
integer: true
}
}
]
});
clickPoint.index({x: 1, y: 1}, {unique: true});
clickPoint.plugin(integerValidator);
clickPoint.plugin(uniqueValidator);
//export model...
module.exports = mongoose.model("ClickPoint", clickPoint);
Контроллер модели:
var ClickPoint = require('../Models/point');
exports.addPoint = function (click) {
ClickPoint.findOne(function (err, data) {
if(!err) {
if(data) {
data.clicks.push({
x: click.x,
y: click.y,
value: click.value
});
data.save();
}
else {
var entry = new ClickPoint({
x: click.x,
y: click.y,
value: click.value
});
entry.save();
}
}
})
};
Может ли быть так, что все записи хранятся в массиве, и, насколько я знаю, индекс позволяет хранить дубликаты в массиве? Если это проблема, то как мне сохранить уникальные объекты в массиве.
Комментарии:
1. Может ли быть так, что все записи хранятся в массиве, и, насколько я знаю, индекс позволяет хранить дубликаты в массиве?
Ответ №1:
Вы индексируете x
amp; y
, в то время как поля являются clicks.x
amp; clicks.y
. Если вы пытаетесь добавить уникальные значения в массив, почему бы не использовать addToSet
?
Комментарии:
1. Спасибо, у меня это сработало. Вы знаете, как вызвать функцию в случае, если значение уже существует?