我需要在我的 MondoDB 数据库中保存一个数组。我用以下代码做到这一点没有问题:
我的对象数组:
[ { name: '1', type: 'float', value: 89.05, timestamp: 1535440000 },
{ name: '10', type: 'float', value: 19.67, timestamp: 1535440000 },
{ name: '15', type: 'float', value: 1.7, timestamp: 1535440000 },
{ name: '17', type: 'float', value: 2.2, timestamp: 1535440000 } ]
保存代码:
data_Greenhouse.collection.insert(data_inver, function (err, docs) {
if (err){
res.status(500).send({message: 'Error al guardar en la base de datos'})
} else {
console.log("Multiple documents inserted to Collection Data_Greenhouse");
res.status(200).send({data_Greenhouse: docs})
}
});
如果在我的集合中已经有名称字段和日期的记录,我需要在保存数组之前检查。如果存在,请勿保存,否则保存。
我怎么能这样做?
问候,谢谢。我希望这很好解释有点令人困惑。
EDIT01
我用我需要的摘要来编辑帖子。
我真的需要将对象数组传递给我的查询并检查它是否存在并使用不在数据库检查中的值生成一个新的。
EDIT02
我正在使用的代码如下:
data_inver.forEach(elem => {
var Yaexiste = Data_Greenhouse.findOne({ 'name': elem.name,'timestamp':elem.timestamp}); // Realizas la busqueda en la DB para cada objeto sino existe, entonces lo inserta
console.log('mostramos los valores: ' + elem.name +" " + elem.timestamp);
console.log('mostramos los valores: ' + Yaexiste[0]);
if(Yaexiste==undefined){
data_Greenhouse.collection.insert(elem, function (err, docs) {
if (err){
res.status(500).send({message: 'Error al guardar en la base de datos'})
console.log("Error");
} else {
console.log("Guardado");
//res.status(200).send({docs})
}
});
}else {
console.log('Los datos ya existen');
}
});
我得到的回应如下:
mostramos los valores: 653 1535440000
mostramos los valores: undefined
Los datos ya existen
mostramos los valores: 657 1518420000
mostramos los valores: undefined
Los datos ya existen
mostramos los valores: 8 1535440000
mostramos los valores: undefined
Los datos ya existen
如您所见,它没有进入if Yaexiste==undefined
最终解决方案:
如果它表现正确,我会将其添加为答案。
Data_Greenhouse.findOne({ 'name': elem.name ,'timestamp':elem.timestamp}, function (err, user) {
console.log('mostramos los valores: ' + user);
if(user==null){
data_Greenhouse.collection.insert(elem, function (err, docs) {
if (err){
res.status(500).send({message: 'Error al guardar en la base de datos'})
console.log("Error");
} else {
console.log("Guardado");
//res.status(200).send({docs})
}
});
}else {
console.log('Los datos ya existen');
}
});
});
确实,您必须创建一个先前的查询以查看它是否存在:
在那里,您可以使用回调搜索代码,因为您将看到输出参数err和
data
,您必须进行评估,data
因为它会告诉您您要查找的数据是否存在。我正在写另一个答案,在对先前答案的评论中补充您的疑问:
您必须评估数据以查看该数组的索引显示您或包含记录,然后执行forEach
您还可以在查询中更具体地执行以下操作:
如果你告诉我的表很大,对于那些你在find方法示例中使用过滤器的人:
如果您在表中查找名称为10 的记录,请使用以下命令:
data_Greenhouse.find({'collection.name': '10'}, 'name, type value', function (err, data) { if (err) return handleError(err);
使用过滤器,您可以确认是否有一条记录等于您要插入的记录
您有一个包含要插入的对象的数组:
你运行那个数组