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();
                    })
                })
            })
        })
    })
    

    ...  

      

      

  • 相关阅读:
    Android-Sqlite-OOP方式操作增删改查
    Android-Sqlite-升级操作
    Android-Sqlite-SQL操作增删改查
    Android-SqliteSQL语句大全
    Android-startService后台运行
    php获取post参数的几种方式 RPC 规定接收取值方式 $GLOBALS['HTTP_RAW_POST_DATA'];
    php echo '<script>alert("插入成功")</script>';
    php urlencode函数 (中文字符转换为十六进制)
    Validform使用ajax详解
    PHP系统级函数 get_headers() 包含有服务器响应一个 HTTP
  • 原文地址:https://www.cnblogs.com/weizaiyes/p/6073426.html
Copyright © 2011-2022 走看看