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 }
] );
В консоли продукты, кажется, просто вставляются в базу данных. Кто-нибудь может сообщить мне причину этой проблемы?
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);
В основном функция, которую вы пытаетесь использовать insertMany (), - это функция MongoDB, которую можно напрямую использовать в консоли mongo без каких-либо проблем. Но в случае, если вы хотите использовать его в своем приложении, что означает использование библиотеки MongoClient, вы тоже можете это сделать ..
Что вам нужно сделать, очень просто, просто используйте его с именем коллекции, которую вы хотите вставить, и передав обязательный обратный вызов fn () в качестве другого аргумента.
Синтаксис:
db.collection(<collectionName>).insertMany([{arglist1},{arglist2},
{arglistn..}],Callbackfn())
Надеюсь, все будет хорошо.
Можно попробовать использовать функции 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();
});
});
Похожие вопросы
Связанные вопросы
Новые вопросы
node.js
Node.js — это основанная на событиях, неблокирующая, асинхронная среда выполнения ввода-вывода, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на стороне клиента, так и на стороне сервера и, следовательно, выигрывают от возможности повторного использования кода и отсутствия переключения контекста.