2012-04-03 66 views
10

Có cách nào để lưu một mảng đối tượng JSON vào một Mongodb chỉ với một cuộc gọi không? cái gì đó như:Làm thế nào để lưu một mảng các đối tượng để mongoose DB chỉ với một cuộc gọi?

schemeObject.save(array_of_json_object, callback); 

Tôi đang sử dụng mongoosejs

+0

Bạn có thể vui lòng cập nhật câu trả lời đúng? –

+0

@IcyFlame Bài đăng được liên kết của bạn về mặt kỹ thuật trùng lặp với bài đăng này. –

+0

@DanMandle đúng! Tôi không để ý ngày tháng. Cảm ơn bạn đã chỉ ra. – IcyFlame

Trả lời

5

Tôi không nghĩ rằng có thể của nó với mongooosejs. Tuy nhiên, bạn có thể sử dụng chèn BATCH của mongodb, được hỗ trợ nguyên bản.

liên kết hữu ích:

http://www.mongodb.org/display/DOCS/Inserting#Inserting-Bulkinserts

https://groups.google.com/forum/#!msg/mongoose-orm/IkPmvcd0kds/bZuYCN_orckJ

+0

câu trả lời được tìm thấy trong liên kết thứ hai. Cảm ơn – jAckOdE

+3

Không còn chính xác nữa. Thực hiện việc này thay vì: http://stackoverflow.com/a/22874288/687677 – superluminary

0

Làm thế nào về một cái gì đó như thế này? Tôi biết nó vòng qua toàn bộ mảng .. không hỏi tôi về Big O cho điều này .. có lẽ không phải là cách tốt nhất để chèn nhưng làm việc cho chỉ là một bãi chứa dữ liệu ban đầu của một số loại ..

var arr = // array of objects; 
    res = []; 

arr.forEach(function (item) { 
    item.save(function (err) { 
     res.push(err); 
     if (res.length === arr.length) 
     { 
      // Done 
     } 
    }); 
}); 
+0

mà không thể chèn hàng loạt nếu từng cái một! – JehandadK

23

Có một cách để chèn hàng loạt với MongooseJS. Tôi không chắc đó có phải là một tính năng mới vì câu hỏi này đã được hỏi/trả lời hay không, nhưng tôi đã biết nếu có ai đó đến đây từ một cuộc tìm kiếm, họ nên biết cách để làm điều đó.

var array = [{ type: 'jelly bean' }, { type: 'snickers' }]; 
Candy.create(array, function (err, jellybean, snickers) { 
    if (err) // ... 
}); 

Dưới đây là các tài liệu: http://mongoosejs.com/docs/api.html#model_Model.create

+3

Điều đó sẽ hiệu quả nếu chúng tôi muốn tạo tài liệu mới. Làm thế nào về cập nhật một mảng hoặc tài liệu mà trở về từ một truy vấn? – jAckOdE

+0

Đối với điều đó, tôi nghĩ rằng bạn sẽ phải làm một tìm() sau đó một forEach() trên kết quả, cập nhật các giá trị và làm một tiết kiệm() cho mỗi người trong số họ. Nhưng tôi khá mới với Mongoose bản thân mình. –

0

Một workaround mà tôi đã sử dụng. Nếu bạn đang sử dụng mongoose với lời hứa, bạn có thể làm điều này bằng cách sử dụng Q.

Bạn có thể bắt đầu sử dụng Q như lời hứa mặc định cho cầy mangut sử dụng mã dưới đây:

const mongoose = require('mongoose'); 
mongoose.Promise = require('q').Promise; 

Sau đó, bạn có thể tiết kiệm một loạt các tài liệu như bên dưới. Giả sử chúng tôi đang lưu trữ một loạt các mô hình Người dùng, mà tôi đã hiển thị trong biến số users.

Q 
    .all(users.map(curr => curr.save())) 
    .then((results) => { //do something }) 
    .catch((err) => { //handle error }) 

.save() sẽ trả về một q lời hứa và sử dụng mảng map chức năng, chúng tôi sẽ tạo ra một mảng hứa hẹn sử dụng các mô hình sử dụng mảng.

0

này làm việc với mongoose cũng

Laptop.insertMany(laptopData, function (err, laptop) { 
    if (err) { 
    console.log(err); 
    }; 
    console.log(laptop); 
}); 
Các vấn đề liên quan