2014-10-28 76 views
0

我是新來的節點和mongo,並有一個奇怪的問題,從mongo shell查看我的數據庫的內容。我構建了一個簡單的REST API,並且具有良好的CRUD功能,但即使數據似乎已保存,我仍無法從shell中找到它。從shell中查看mongo db內容

我的程序很簡單;我從this example複製它。

有三個文件:package.json,server.js(主文件)和routes/wines.js。 Mongo db是像往常一樣安裝和配置的(監聽端口27017)。我可以從shell中添加,更新,讀取和刪除收集項目,而不會出現任何問題。

的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命令,我沒有問題。我可以創建,讀取和編輯數據庫中的數據,並且在終端上顯示正常。

然而,mongo shell是一個不同的故事。當我運行「秀星展」,我看到我的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 shell上看到我的數據?

回答

1

你的數據庫稱爲winedb和集合稱爲wines,但你一直在試圖找到文件的命名空間winedb.winedb,而不是winedb.wines。嘗試在外殼下面:

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

感謝wdberkeley!你有沒有可能爲mongo推薦一個好的GUI? – 2014-10-28 17:25:08

1

您可以在here 上看到以下查詢,並使用像robomongo這樣的應用程序。這也會給你查詢。

簡單的查詢得到的收集

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

還是什麼都沒有,可悲的是 – 2014-10-28 07:07:12

+0

{}集合名沒有你把集合名稱 – 2014-10-28 07:10:12

+0

你有沒有看到任何收藏列表 – 2014-10-28 07:10:29