Mongoose Атлас связи висит - PullRequest
       11

Mongoose Атлас связи висит

0 голосов
/ 25 марта 2019

Я пытаюсь абстрагировать учебник для стека MEAN, чтобы использовать MongoAtlas, а не локальный экземпляр. Мое соединение Mongoose с БД Atlas работает (насколько я могу подключиться к БД). Но я не могу сделать сохранение (). Я полагаю, что это как-то связано с тем, как я создаю свой объект подключения, но мне кажется, что я не могу понять, в чем проблема.

Я предполагал, что, добавив bufferCommands = false, это скажет мне, что причина, по которой он не работает, заключается в том, что я неправильно открыл объект подключения, но я не вижу никакой ошибки - просто зависаю.

product.js

var mongoose = require('mongoose');
var db = mongoose.connection;
var Schema = mongoose.Schema;

var schema = new Schema ({
    imagePath: {type: String, required: true},
    title: {type: String, required: true},
    description: {type: String, required: true},
    price: {type: Number, required:true}
});
var connection = mongoose.createConnection('mongodb+srv://<user>:<password>@cluster0-dpwmr.gcp.mongodb.net/Shopping?retryWrites=true', {useNewUrlParser:true})

module.exports = connection.model('Product', schema);

продакт-seeder.js

var Product = require('../models/product');

var mongoose = require('mongoose');
//mongoose.set('bufferCommands', false);
var products =[ 
    new Product({
        imagePath:'https://picsum.photos/250/?random',
        title: 'Item 1',
        description: 'This is a thing',
        price: 10
        }),
    new Product({
        imagePath:'https://picsum.photos/251/?random',
        title: 'Item 2',
        description: 'This is another thing',
        price: 14
        }),
    new Product({
        imagePath:'https://picsum.photos/253/?random',
        title: 'Item 3',
        description: 'This is a slightly longer description',
        price: 30
        })
];


var done = 0;
for (i=0; i++; i<products.length){
    products[i].save(function(err, res){
        if (err){
            console.log(err);
            exit();
        }
        done++;
        if (done === products.length){
            exit();
        }
    });
}

function exit(){
    mongoose.disconnect();
}

Я ожидал, что это создаст новый документ 'products' и запишет его в коллекцию Shopping, но этого не происходит, просто много ничего.

1 Ответ

0 голосов
/ 27 марта 2019

У меня это работает с комбинацией:

  • Использование mongoose.connect ()
  • Добавление имени БД в объект параметров
  • Созданиеубедитесь, что записи в БД выполняются с правильными обещаниями, а не странными циклами.
var mongoose = require('mongoose');
var db = mongoose.connection;
var Schema = mongoose.Schema;

var schema = new Schema ({
    imagePath: {type: String, required: true},
    title: {type: String, required: true},
    description: {type: String, required: true},
    price: {type: Number, required:true}
});
mongoose.connect('mongodb+srv://<UserName>:<Password>@cluster0-dpwmr.gcp.mongodb.net/', {dbName:'Shopping', useNewUrlParser:true})
.then( () => {
    console.log('Connection to the Atlas Cluster is successful!')
  })
  .catch( (err) => console.error(err));

const conn = mongoose.connection;
module.exports = mongoose.model('Product', schema);
var Product = require('../models/product');

var mongoose = require('mongoose');

var products =[ 
    new Product({
        imagePath:'https://picsum.photos/250/?random',
        title: 'Item 1',
        description: 'This is a thing',
        price: 10
        }),
    new Product({
        imagePath:'https://picsum.photos/251/?random',
        title: 'Item 2',
        description: 'This is another thing',
        price: 14
        }),
    new Product({
        imagePath:'https://picsum.photos/253/?random',
        title: 'Item 3',
        description: 'This is a slightly longer description',
        price: 30
        })
];
const conn = mongoose.connection;

processArray(products);

async function processArray (array) {
   for (const item of products){
       console.log (item)
       await item.save();
   }
   conn.close();
}

...