简体   繁体   English

mongodb 中的批量操作

[英]Bulk operations in mongodb

So I have this array for my collection that I need to store using Bulk Operations:所以我有这个数组用于我需要使用批量操作存储的集合:

let arr = [
    {
        name: "John",
        marks: 3
    },
    {
        name: "Mike",
        marks: 2
    },
    {
        name: "Andrew",
        marks: 6
    },
    {
        name: "John",
        marks: 8
    },
    {
        name: "John",
        marks: 4
    },
    {
        name: "John",
        marks: 2
    },
    {
        name: "Mike",
        marks: 1
    },
    {
        name: "Andew",
        marks: 3
    },
    {
        name: "Mike",
        marks: 6
    }
]

So what I am currently doing now is:所以我现在正在做的是:

for(var i = 0; i < arr.length; i++){

    if(Students.findOne({name: arr[i].name})){

        Students.update({name: arr[i].name}, {$inc: {marks: arr[i].marks]}});
    }
    else {

        Students.insert({name: arr[i].name, marks: arr[i].marks]});
    }
}

Now I have so many records in array which I have to add in Mongodb every minute.现在我有这么多的数组记录,我必须每分钟在 Mongodb 中添加。 So I need to perform this operation very fast.所以我需要非常快地执行这个操作。 How can I achieve this same behavior using Mongodb Bulk Operations?如何使用 Mongodb 批量操作实现相同的行为? So I have this array for my collection that I need to store using Bulk Operations:所以我有这个数组用于我需要使用批量操作存储的集合:

let arr = [
    {
        name: "John",
        marks: 3
    },
    {
        name: "Mike",
        marks: 2
    },
    {
        name: "Andrew",
        marks: 6
    },
    {
        name: "John",
        marks: 8
    },
    {
        name: "John",
        marks: 4
    },
    {
        name: "John",
        marks: 2
    },
    {
        name: "Mike",
        marks: 1
    },
    {
        name: "Andew",
        marks: 3
    },
    {
        name: "Mike",
        marks: 6
    }
]

So what I am currently doing now is:所以我现在正在做的是:

for(var i = 0; i < arr.length; i++){

    if(Students.findOne({name: arr[i].name})){

        Students.update({name: arr[i].name}, {$inc: {marks: arr[i].marks]}});
    }
    else {

        Students.insert({name: arr[i].name, marks: arr[i].marks]});
    }
}

Now I have so many records in array which I have to add in Mongodb every minute.现在我有这么多的数组记录,我必须每分钟在 Mongodb 中添加。 So I need to perform this operation very fast.所以我需要非常快地执行这个操作。 How can I achieve this same behavior using Mongodb Bulk Operations?如何使用 Mongodb 批量操作实现相同的行为?

you can use upsert in updateOne and Update.您可以在 updateOne 和 Update 中使用 upsert。 so it will kinda look like所以它看起来像

Students.update({name: arr[i].name}, {{upsert: true},{$set: data, $inc: {marks: arr[i].marks]}}});

i would recommend to use updateOne if you dont want want the possibility to change multiple records如果您不想更改多条记录,我建议您使用 updateOne

https://www.mongodb.com/docs/manual/reference/method/db.collection.updateOne/ https://www.mongodb.com/docs/manual/reference/method/db.collection.updateOne/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM