import { MongoClient } from 'mongodb';
import assert from 'assert';
import config from './config';


console.log('Inside File');
MongoClient.connect(config.mongodbUri, (err, db) => {
  assert.equal(null, err);


 db.products.insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] ); 
      db.close();

});

Для приведенного выше кода я получаю сообщение об ошибке Cannot read property insertMany of undefined. Но когда я просто ввожу ниже

 db.products.insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] ); 

В консоли продукты, кажется, просто вставляются в базу данных. Кто-нибудь может сообщить мне причину этой проблемы?

2
user3804335 23 Дек 2016 в 16:56
1
Попробуйте с db.collection ('продукты')
 – 
ArkadyB
23 Дек 2016 в 17:11
Пожалуйста, взгляните на этот ответ здесь: stackoverflow.com/a/47662979/5483194 Я думаю, вы используете старый API с новой версией, и поэтому вы получаете эту ошибку.
 – 
Mostafa Darezereshki
29 Янв 2021 в 05:26

3 ответа

insertMany() - это функция mongoDB, она будет работать, если вы попробуете ее в консоли,
но в nodeJs вы имеете дело с Mongoose (драйвером mongoDb), у которого нет этой функции, для хранения элементов с помощью mongoose вам нужно сделать products.save(), и он не поддерживает массовые вставки (вы можете только вставить по одному), поэтому вам нужно пройти цикл:

var items = [{ item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }];

var Products = mongoose.model('Products'); // don't know what you have as a model

for ( var i in items) {
    Products.save(items[i]);
}

Конечно, вам нужно будет обрабатывать ошибки .. и т. д.

Если у вас еще нет модели, вот отрывок:

var Schema = mongoose.Schema; 
var products = new Schema({
    item : String
  , qty  : int
});
mongoose.model("Products", Products);
0
Taki 23 Дек 2016 в 17:25
Вы можете использовать драйвер Mongo в Node напрямую, без использования ORM, такого как Mongoose, вот пример: bezkoder.com/node-js-csv-mongodb-коллекция
 – 
Mostafa Darezereshki
29 Янв 2021 в 05:25

В основном функция, которую вы пытаетесь использовать insertMany (), - это функция MongoDB, которую можно напрямую использовать в консоли mongo без каких-либо проблем. Но в случае, если вы хотите использовать его в своем приложении, что означает использование библиотеки MongoClient, вы тоже можете это сделать ..

Что вам нужно сделать, очень просто, просто используйте его с именем коллекции, которую вы хотите вставить, и передав обязательный обратный вызов fn () в качестве другого аргумента.

Синтаксис:

db.collection(<collectionName>).insertMany([{arglist1},{arglist2},
{arglistn..}],Callbackfn())

Надеюсь, все будет хорошо.

0
maazza 24 Дек 2016 в 14:16

Можно попробовать использовать функции db.collection('products').insertMany и callback

MongoClient.connect(config.mongodbUri, (err, db) => {
  assert.equal(null, err);

 db.collection('products').insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] , function(error, doc) {
        if(error) {
           console.log(error);
        } else {
           console.log('success');
        }
        db.close();
    }); 
});
4
Shaishab Roy 23 Дек 2016 в 18:41