2012-03-20 91 views
1

我使用mongoose/nodejs從mongodb獲取數據作爲json。對於使用貓鼬我需要首先定義模式這樣從動態模式獲取數據

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var GPSDataSchema = new Schema({ 
    createdAt: { type: Date, default: Date.now } 
    ,speed: {type: String, trim: true} 
    ,battery: { type: String, trim: true } 
}); 

var GPSData = mongoose.model('GPSData', GPSDataSchema); 
mongoose.connect('mongodb://localhost/gpsdatabase'); 
var db = mongoose.connection; 
db.on('open', function() { 
    console.log('DB Started'); 
}); 

然後在代碼中,我可以從數據庫中像

GPSData.find({"createdAt" : { $gte : dateStr, $lte: nextDate }}, function(err, data) { 

      res.writeHead(200, { 
        "Content-Type": "application/json", 
        "Access-Control-Allow-Origin": "*" 
      }); 
      var body = JSON.stringify(data); 
      res.end(body); 
     }); 

如何定義這樣一個複雜的數據方案得到的數據,你可以看到, subSection可以進入更深層次。

[ 
    { 
    'title': 'Some Title', 
    'subSection': [{ 
     'title': 'Inner1', 
     'subSection': [ 
      {'titile': 'test', 'url': 'ab/cd'} 
     ] 
    }] 
    }, 
    .. 
] 
+0

我對Mongoose不是很熟悉,但是這個主題可能會讓你感興趣:https://groups.google.com/forum/?fromgroups#!topic/mongoose-orm/0yUVXNyprx8。 – Ren 2012-03-20 14:42:19

回答

1

the Mongoose documentation

var Comment = new Schema({ 
    body : String 
    , date : Date 
}); 

var Post = new Schema({ 
    title  : String 
    , comments : [Comment] 
}); 

通知Comment是如何被定義爲Schema,然後在陣列中引用Post.comments

你的情況有點不同:你有一個自引用我沒有試過的模式,但它看起來像這樣:

var sectionSchema = new Schema({ 
    title: String 
    ,subSections: [sectionSchema] 
}); 

mongoose.model('Section', sectionSchema); 

然後,你可以添加小節,像這樣:

var section = new mongoose.model('Section'); 
section.subSections.push({title:'My First Subsection'}) 

讓我知道它是如何工作的。