Я новичок в узле и монго, и у меня возникла странная проблема с просмотром содержимого моей базы данных из оболочки mongo. Я создал простой REST api и имею хорошую функциональность CRUD, но даже несмотря на то, что данные, похоже, сохранены, я не могу найти их из оболочки.Просмотр содержимого mongo db из оболочки
Моя программа проста; Я скопировал его с this example.
Существует три файла: package.json, server.js (основной файл) и маршруты/wines.js. Mongo db установлен и настроен как обычно (прослушивание на порту 27017). Я могу добавлять, обновлять, читать и удалять элементы коллекции из оболочки без проблем.
package.json:
{
"name": "wine-cellar",
"description": "Wine Cellar Application",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x",
"mongodb": "^1.4.19"
}
}
server.js
var express = require('express'),
wine = require('./routes/wines');
var app = express();
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());
app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);
app.post('/wines', wine.addWine);
app.put('/wines/:id', wine.updateWine);
app.delete('/wines/:id', wine.deleteWine);
app.listen(3000);
console.log('Listening on port 3000...');
маршруты/wines.js (очень простой REST API)
var mongo = require('mongodb');
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
var server = new Server('localhost', 27017, {auto_reconnect: true});
db = new Db('winedb', server);
db.open(function(err, db) {
if(!err) {
console.log("Connected to 'winedb' database");
db.collection('wines', {strict:true}, function(err, collection) {
if (err) {
console.log("The 'wines' collection doesn't exist. Creating it with sample data...");
populateDB();
}
});
}
});
exports.findById = function(req, res) {
var id = req.params.id;
console.log('Retrieving wine: ' + id);
db.collection('wines', function(err, collection) {
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
res.send(item);
});
});
};
exports.findAll = function(req, res) {
db.collection('wines', function(err, collection) {
collection.find().toArray(function(err, items) {
res.send(items);
});
});
};
exports.addWine = function(req, res) {
var wine = req.body;
console.log('Adding wine: ' + JSON.stringify(wine));
db.collection('wines', function(err, collection) {
collection.insert(wine, {safe:true}, function(err, result) {
if (err) {
res.send({'error':'An error has occurred'});
} else {
console.log('Success: ' + JSON.stringify(result[0]));
res.send(result[0]);
}
});
});
}
exports.updateWine = function(req, res) {
var id = req.params.id;
var wine = req.body;
console.log('Updating wine: ' + id);
console.log(JSON.stringify(wine));
db.collection('wines', function(err, collection) {
collection.update({'_id':new BSON.ObjectID(id)}, wine, {safe:true}, function(err, result) {
if (err) {
console.log('Error updating wine: ' + err);
res.send({'error':'An error has occurred'});
} else {
console.log('' + result + ' document(s) updated');
res.send(wine);
}
});
});
}
exports.deleteWine = function(req, res) {
var id = req.params.id;
console.log('Deleting wine: ' + id);
db.collection('wines', function(err, collection) {
collection.remove({'_id':new BSON.ObjectID(id)}, {safe:true}, function(err, result) {
if (err) {
res.send({'error':'An error has occurred - ' + err});
} else {
console.log('' + result + ' document(s) deleted');
res.send(req.body);
}
});
});
}
/*--------------------------------------------------------------------------------------------------------------------*/
// Populate database with sample data -- Only used once: the first time the application is started.
// You'd typically not find this code in a real-life app, since the database would already exist.
var populateDB = function() {
var wines = [
{
name: "CHATEAU DE SAINT COSME",
year: "2009",
grapes: "Grenache/Syrah",
country: "France",
region: "Southern Rhone",
description: "The aromas of fruit and spice...",
picture: "saint_cosme.jpg"
},
{
name: "LAN RIOJA CRIANZA",
year: "2006",
grapes: "Tempranillo",
country: "Spain",
region: "Rioja",
description: "A resurgence of interest in boutique vineyards...",
picture: "lan_rioja.jpg"
}];
db.collection('wines', function(err, collection) {
collection.insert(wines, {safe:true}, function(err, result) {});
});
};
Когда я проверить API от моего терминал, используя команды curl, у меня нет проблем. Я могу создавать, читать и редактировать данные из базы данных, и это хорошо видно на моем терминале.
Корпус манго, однако, это совсем другая история. Когда я бегу «показать DBS», я вижу в списке моя база данных winedb, но когда я бегу запросов на него, он ведет себя так, как если бы база данных пуста:
> use winedb
switched to db winedb
> db.winedb.count()
0
> db.getCollection('winedb')
winedb.winedb
> db.count()
2014-10-28T00:14:26.229-0400 TypeError: Property 'count' of object winedb is not a function
> db.winedb.count()
0
> db.getCollection('winedb').find()
> db.getCollection('winedb').count()
0
Между тем curl'ing все продолжает работать нормально. Как я могу увидеть свои данные в оболочке mongo?
Благодаря wdberkeley! Есть ли шанс, что вы можете порекомендовать хороший графический интерфейс для монго? –