zoukankan      html  css  js  c++  java
  • 3.从Node.js操作MongoDB文档

    1.更新文档结构,而非SQL

    2.数据库更新运算符

    在MongoDB中执行对象的更新时,需要确切的指定需要改变什么字段。需要如何改变。不像SQL语句建立冗长的查询字符串来定义更新。

    MongoDB中可以实现update对象与运算符定义如何改变文档中的数据

    {

       <operator>:{<field_operation>,<field_operation>,...},

       <operator>:{<field_operation>,<field_operation>,...}

       ...

    }

    {
      name:'myName',
      countA:0,
      countB:0,
      days:["Monday","Wednesday"],
      scores:[{id:"test1",score:94},{id:"test2",score:85},{id:"test3",score:97}]
    }
    //进行update
    {
      $inc:{countA:5,countB:1},
      $set:{name:"New Name"},
      $sort:{score:1}
    }
    

    3.将文档添加到集合

    用MongoDB的数据库进行交互的另一个常见任务是往集合中插入文档。

    要插入一个文档,首先是创建JavaScript对象表示要存储的文档。因为MongoDB使用的BSON格式是基于JavaScript符号的,再此创建一个JavaScript对象。

    insert(docs,[options],callback)

    把文档插入到集合。

    var MongoClient=require('mongodb').MongoClient;
    function addObject(collection,object){
    	collection.insert(object,function(err,result){
    		if(!err){
    			console.log('Insert : ');
    			console.log(result);
    		}
    	});
    }
    MongoClient.connect("mongodb://localhost/",function(err,db){
    	var myDB=db.db("astro");
    	myDB.dropCollection("nebulae");
    	myDB.createCollection("nebulae",function(err,nebulae){
    		addObject(nebulae,{ngc:"NGC 10001",name:"Helix",type:"planetary",location:"Aquila"});
    		addObject(nebulae,{ngc:"NGC 20001",name:"Cat's Eye",type:"planetary",location:"Draco"});		
    	})
    	setTimeout(function(){db.close();console.log('db closed')},3000)
    })
    

    4.从集合获取文档  

    对于存储在MongoDB数据库中的数据,通常需要执行:检索一个或多个文档。

    如:商业网站上的产品的产品信息,信息被储存一次但检索多次(筛选,排序,汇总)

    find(query,[options],callback)

    findOne(query,[options],callback)

    query对象包含了与文档的字段匹配的属性。与query对象匹配的文档包含在列表中。

    options参数是一个对象,指定有关查找文档(限制,排序和返回值)

    不同之处是回调函数:find()方法返回一个可在检索的文档上迭代的Cursor对象。findOne()返回单个对象。

    利用find()和findOne(),在MongoDB中查找文档

    var MongoClient=require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/",function(err,db){
    	var myDB=db.db("astro");
    	myDB.collection("nebulae",function(err,nebulae){
    		nebulae.find(function(err,items){
    			items.toArray(function(err,itemArr){
    				console.log('Document Array: ');
    				console.log(itemArr);
    			});
    		});
    		nebulae.find(function(arr,items){
    			items.each(function(err,item){
    				if(item){
    					console.log('singular document');
    					console.log(item);					
    				}
    			})
    		});
    		nebulae.findOne({name:'Helix'},function(err,item){
    			console.log('found one: ');
    			console.log(item);
    		})
    	})
    	setTimeout(function(){db.close();console.log('close db');},3000);
    })
    

    更新集合中的文档

    update(query,update,[options],[callback])

    var MongoClient = require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/", function(err, db) {
        var myDB = db.db("astro");
        myDB.collection("nebulae", function(err, nebulae) {
            nebulae.find({ type: "planetary" }, function(err, items) {
                items.toArray(function(err, itemArr) {
                    console.log("before update: ");
                    console.log(itemArr);
                    nebulae.update({ type: "planetary", $isolated: 1 },
                     { $set: { type: "Plane", update: true }},
                     { upsert: false, multi: true, w: 1 },
                        function(err, results) {
                            nebulae.find({type:"Plane"}).toArray(function(err, docs) {
                            	console.log("after update: ");
                            	console.log(docs);
                            	db.close();
                            });
                        }
                    )
                })
            })
        })
    })
    

    原子地修改文档的集合

    findAndModify(query,sort,update,[options],callback)

    var MongoClient=require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/",function(err,db){
    	var myDB=db.db('astro');
    	myDB.collection("nebulae",function(err,nebulae){
    		nebulae.find({name:"Helix"},function(err,items){
    			items.toArray(function(err,itemArr){
    				console.log("before modify: ");
    				console.log(itemArr);
    				nebulae.findAndModify({location:"Draco"},[['name',1]],
    					{$set:{location:'Draco_FF',"update":true}},
    					{w:1,new:true},function(err,doc){
    						console.log('after modify: ');
    						console.log(doc);
    						db.close();
    					}
    				)
    			})
    		})
    	})
    })
    

    保存集合中的文档  

    save(doc,[options],[callback])

    var MongoClient=require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/",function(err,db){
    	var myDB=db.db('astro');
    	myDB.collection("nebulae",function(err,nebulae){
    		nebulae.findOne({type:"Plane"},function(err,item){
    			console.log("before save: ");
    			console.log(item);
    			item.info="some New Info";
    			nebulae.save(item,{w:1},function(err,results){
    				nebulae.findOne({_id:item._id},function(err,savedItem){
    					console.log("after saved: ");
    					console.log(savedItem);
    					db.close();
    				})
    			})
    		})
    	})
    })
    

    使用upsert往集合中插入文档

    var MongoClient=require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/",function(err,db){
    	var myDB=db.db("astro");
    	myDB.collection("nebulae",function(err,nebulae){
    		nebulae.find({type:"diffuse"},function(err,items){
    			items.toArray(function(err,itemArr){
    				console.log("before upsert: ");
    				console.log(itemArr);
    				nebulae.update({type:"diffuse"},
    					{$set:{ngc:"NGC 3372",name:"Carina",type:"diffuse",location:"Carina"}},
    					{upsert:true,w:1,forceServerObjectId:false},
    					function(err,results){
    						nebulae.find({type:"diffuse"},function(err,items){
    							items.toArray(function(err,itemArr){
    								console.log('after upsert 1: ');
    								console.log(itemArr);
    								var itemID=itemArr[0]._id;
    								nebulae.update({_id:itemID},
    									{$set: {ngc:"NGC 3373",name:"Carina",type:"Diffuse",location:"Carina"}},
    									{update:true,w:1},
    									function(err,results){
    										nebulae.findOne({_id:itemID},function(err,item){
    											console.log('after upsert 2: ');
    											console.log(item);
    											db.close();
    										})
    									}									
    								)
    							})
    						})
    					}
    				)
    			})
    		})
    	})
    })  

    从集合中删除文档

    remove([query],[options],[callback])

    var MongoClient=require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/",function(err,db){
    	var myDB=db.db("astro");
    	myDB.collection("nebulae",function(err,nebulae){
    		nebulae.find(function(err,items){
    			items.toArray(function(err,itemArr){
    				console.log('before delete: ');
    				console.log(itemArr);
    				nebulae.remove({type:"Diffuse"},function(err,results){
    					console.log('delete: '+results+" document.");
    					nebulae.find(function(err,items){
    						items.toArray(function(err,itemArr){
    							console.log('after delete: ');
    							console.log(itemArr);
    							db.close();
    						})
    					})
    				})
    			})
    		})
    	})
    })
    

    从集合中删除单个文档

    findAndRemove(query,sort,[options],callback)

    var MongoClient = require('mongodb').MongoClient;
    MongoClient.connect("mongodb://localhost/", function(err, db) {
        var myDB = db.db("astro");
        myDB.collection("nebulae", function(err, nebulae) {
            nebulae.find().toArray(function(err, docs) {
                console.log("before delete: ");
                console.log(docs);
                nebulae.findAndRemove({ type: "Diffuse" }, [
                    ['name',1]
                ], { w: 1 }, function(err, results) {
                    console.log('deleted:
    ' + results);
                    nebulae.find().toArray(function(err, itemArr) {
                        console.log('after delete: ');
                        console.log(itemArr);
                        db.close();
                    })
                })
            })
        })
    })
    

    ...  

      

      

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/weizaiyes/p/6073426.html
Copyright © 2011-2022 走看看