Вот основной код, чтобы посмотреть вКак правильно использовать Mongoose запрос, найти и массив объектов, обновление
function update(feed){
//.. do set up
var target = feed.title;
var value = {index: feed.value};
var query = { test: target, 'array.index': {$ne: value.index} },
update = { $push : {"array" : value} },
options = { upsert: true, new: true };
Model.findOneAndUpdate(query, update, options, function(err, docs) {
if(err) throw err;
console.log(docs);
}
);}
(я изменил код, чтобы быть вообще. Если вам нужен специфический код, просто спросите меня, чтобы обновить это пост)
Я пытаюсь сделать Model.findOneandUpdate с upsert: истинный.
Мой код выполняется, когда конкретное событие, излучаемый
feedparser.on('readable', function() {
update(this.read());
});
из еще потому «array.index»: {$ пе: value.index} запроса, код создает новый после первого исполнения.
Поэтому
db.collection.find()
возвращает несколько документов, имеет же свойство с различными ObjectId.
Для примера,
{ "_id": ObjectId ("1"), тест: "А", массив: [{индекс: "1"}]}
{ "_id": ObjectId ("2"), тест: "А", массив: [{индекс: "1"}]}
Я хочу быть код сделать
- Проверить документ существует, или нет.
- Если существует, добавьте новое значение в массив документа. Кроме того, новое значение должно быть уникальным по индексу .
- Если НЕ существует, создайте новый документ и добавьте новое значение в новый массив документа.
UPDATE:
Я также пытаюсь сделать это
var doc = Model.findOne({ test: target });
if(doc != null){
var query = { _id: doc._id, 'array.index': {$ne: value.index} };
var update = { $push : {"array" : value} };
var options = {new: true};
Model.update(query, update, options, function(err, d){
if(err) throw err;
console.log(d);
});
}else{
doc = {
test: target,
array:[value]
};
Model.create(doc, function (err, res){
if(err) throw err;
console.log(res);
});
}
Этот результат кода в не делать ничего.
UPDATE
Я также попробовать это,
Model.findOne({ test:target }, function(err, doc){
if(doc === null){
doc = {
test: target
arrays:[value]
};
Animation.create(doc, {new: true}, function (err, res){
if(err) throw err;
console.log(res);
});
}else{
var query = { _id: doc._id, 'arrays.index': {$ne: value.index} };
var update = { $push : {"arrays" : value} };
var options = {new: true};
Animation.update(query, update, options, function(err, res){
if(err) throw err;
console.log(res);
});
}
});
Но, это создать новый документ каждым другим значением индекса.
UPDATE
var query = { test: target, 'array:index': {$ne: value.index} };
var update = { $push : {'array' : value}};
var options = {new: true};
Model.findOneAndUpdate(query, update, options, function(err, doc){
if(err) throw err;
if(doc === null){
doc = new Model({
test: target,
array:[value]
});
doc.save();
}
});
Он также не работает ...