mongooseã§åãè¾¼ã¿ã使ã
MongoDBã®ãªã¬ã¼ã·ã§ã³ã§ãããåãè¾¼ã¿ã§ãããè¿·ã£ãæ«ã«åãè¾¼ã¿ã§ãããã¨ã«ããã®ã§ã
mongooseã§ã®ããæ¹ããã£ã¨è©¦ãã¦ã¿ãã
使ã£ããã¼ã¸ã§ã³
node.js v0.8.18
mongoose 3.5.5
試é¨ã½ã¼ã¹
ã³ã¼ã«ããã¯ã ããã«ãªãã®ã§ãjsdeferred使ã£ã¦æµãæ´çããã
var Deferred = require('./deps/jsdeferred').Deferred, // mongoose mongoose = require('mongoose'), // åã¹ãã¼ã ChildSchema = new mongoose.Schema({ name : String }), // 親ã¹ãã¼ã ParentSchema = new mongoose.Schema({ name : String, childlen : [ChildSchema] }), // 親ã¢ãã« Parent = mongoose.model('Parent', ParentSchema); // æ¥ç¶ mongoose.connect('mongodb://localhost/foo'); !function() { // æåã«db.parentsãå ¨é¨æ¶ãã¦ãã var d = new Deferred(); Parent.remove(function(err) { if (err) { d.fail(err); return; } d.call(); }); return d; }() .next(function() { var d = new Deferred(), // parentãæ°è¦ä½æãã¦ä¿å parent = new Parent({ name : 'test' }); parent.save(function(err) { if (err) { d.fail(err); return; } d.call(); }); return d; }) .next(function() { var d = new Deferred(); // 親ãåå¾ Parent.findOne({ name : 'test'}, function(err, parent) { if (err) { d.fail(err); return; } // 親ã®ååããã§ã㯠console.log(parent.name); console.log('åä¾ã0人'); // ãã®æç¹ã§ã¯ã¾ã åä¾ãããªã console.log(parent.childlen); // åä¾ãä¸äººè¿½å parent.childlen.push({ name : 'baby1' }); parent.save(function(err) { if (err) { d.fail(err); } d.call(); }); }); return d; }) .next(function() { var d = new Deferred(); // 親ãåå¾ Parent.findOne({ name : 'test'}, function(err, parent) { if (err) { d.fail(err); return; } console.log('åä¾ã1人'); console.log(parent.childlen); // ã¾ã¨ãã¦è¤æ°äººè¿½å parent.childlen.push({ name : 'baby2' }); parent.childlen.push({ name : 'baby3' }); parent.childlen.push({ name : 'baby4' }); parent.save(function(err) { if (err) { d.fail(err); } d.call(); }); }); return d; }) .next(function() { var d = new Deferred(); // 親ãåå¾ Parent.findOne({ name : 'test'}, function(err, parent) { if (err) { d.fail(err); return; } console.log('åä¾ã4人'); console.log(parent.childlen); // ååãæ´æ°ãã parent.childlen[0].name = 'John'; parent.childlen[1].name = 'Paul'; parent.childlen[2].name = 'George'; parent.childlen[3].name = 'Ringo'; parent.save(function(err) { if (err) { d.fail(err); } d.call(); }); }); return d; }) .next(function() { var d = new Deferred(); // 親ãåå¾ Parent.findOne({ name : 'test'}, function(err, parent) { if (err) { d.fail(err); return; } console.log('æ´æ°å¾'); console.log(parent.childlen); // 1ã¤åé¤ parent.childlen.remove(parent.childlen[1]); parent.save(function(err) { if (err) { d.fail(err); } d.call(); }); }); return d; }) .next(function() { var d = new Deferred(); // 親ãåå¾ Parent.findOne({ name : 'test'}, function(err, parent) { if (err) { d.fail(err); return; } console.log('1件åé¤å¾'); console.log(parent.childlen); // å ¨ã¦åé¤ãã /** * forEachã ã¨ãã¾ãæ¶ããªã */ // parent.childlen.forEach(function(c) { // c.remove(); // }); var i, len = parent.childlen.length; for (i = len - 1; i >= 0; i--) { parent.childlen[i].remove(); } parent.save(function(err) { if (err) { d.fail(err); } d.call(); }); }); return d; }) .next(function() { var d = new Deferred(); // 親ãåå¾ Parent.findOne({ name : 'test'}, function(err, parent) { if (err) { d.fail(err); return; } console.log('0人'); console.log(parent.childlen); d.call(); }); return d; }) .next(function() { mongoose.disconnect(); }) .error(function(err) { console.log(err); mongoose.disconnect(); });
å®è¡çµæ
$ node index test åä¾ã0人 [] åä¾ã1人 [{ name: 'baby1', _id: 51110eba0d42bc5711000003 }] åä¾ã4人 [{ name: 'baby1', _id: 51110eba0d42bc5711000003 } { name: 'baby2', _id: 51110eba0d42bc5711000004 } { name: 'baby3', _id: 51110eba0d42bc5711000005 } { name: 'baby4', _id: 51110eba0d42bc5711000006 }] æ´æ°å¾ [{ _id: 51110eba0d42bc5711000003, name: 'John' } { _id: 51110eba0d42bc5711000004, name: 'Paul' } { _id: 51110eba0d42bc5711000005, name: 'George' } { _id: 51110eba0d42bc5711000006, name: 'Ringo' }] 1件åé¤å¾ [{ _id: 51110eba0d42bc5711000003, name: 'John' } { _id: 51110eba0d42bc5711000005, name: 'George' } { _id: 51110eba0d42bc5711000006, name: 'Ringo' }] 0人 []
ææ³
åé¤ã®æã«forEachã§åãã¨ã¤ã³ããã¯ã¹ã®é¢ä¿ãåé¤ãã¾ããããªãã¿ããã