我有一组项目,所有项目都有序列号和附加的其他字段。文件看起来像这样
{
_id: ObjectId(),
serialNum: "123456789",
...otherfields
}
我要插入一个新文档,但前提是没有一个现有文档与serialNum字段匹配。
我目前使用下面的方法,但是它要求我抓取整个集合,遍历整个集合,然后执行插入。我可以使用其他替代方法吗,因为在我的大型收藏夹上这很慢
当前代码:
const insertItems = (newItem) => {
const itemsCollection = mongodb.db("database").collection("customers");
itemExists = false;
itemsCollection.find({}).toArray()
.then((items) => {
for(let i = 0; i < items.length; i++){
if(items[i].serialNum == newItem.serialNum){
itemExists = true
}
}
})
.then(() => {
if(itemExists){
//error here
} else {
//insert new item
}
})
}
答案 0 :(得分:0)
为什么不循环所有集合,为什么不只获取序列号为as的那个:
const insertItems = (newItem) => {
const itemsCollection = mongodb.db("database").collection("customers");
itemExists = false;
itemsCollection.find({serialNum:newItem.serialNum}).toArray()
.then((items) => {
if(items.length){
itemExists=true
}
})
.then(() => {
if(itemExists){
//error here
} else {
//insert new item
}
})
}
答案 1 :(得分:0)
尝试此代码
const insertItems = (newItem) => {
const itemsCollection = mongodb.db("database").collection("customers");
itemsCollection.update({serialNum:newItem.serialNum},{
// New fields which you want to insert or update
},{upsert: true})
.then((items) => {
console.log(item);
}).catch((err)=>{
// error here
})
}