2014-10-28 2 views
0

Я новичок в узле и монго, и у меня возникла странная проблема с просмотром содержимого моей базы данных из оболочки 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?

ответ

1

Ваша база данных называется winedb и коллекция называется wines, но вы пытались найти документы в пространстве имен winedb.winedb вместо winedb.wines. Попробуйте следующее в оболочке:

> use winddb 
> db.wines.findOne() 
+0

Благодаря wdberkeley! Есть ли шанс, что вы можете порекомендовать хороший графический интерфейс для монго? –

1

Вы можете найти следующие предложения по here и использовать приложение типа robomongo. это также даст вам запрос.

простой запрос, чтобы получить Collecion

> use winedb 
> show collections or tables //this will gives you list of collection 
> db.{collectionNAME}.find() 
> db.{collectionNAME}.count() 
> db.{collectionNAME}.find({id:''}) 
+0

Еще ничего, к сожалению –

+0

{CollectionName} вы положили название коллекции –

+0

вы видите какой-либо список коллекции –