zoukankan      html  css  js  c++  java
  • node查询mongo

    http://www.cnblogs.com/whoamme/p/3467374.html

    nosql的数据库的查询:可以分为查询所有,查询一个,条件查询,和表的关联查询。(这个另外在写一个独立的mongo吧)

    看这个api:http://api.mongodb.com/

    http://mongodb.github.io/node-mongodb-native/2.0/api/

    Post.prototype.save = function(callback) {
      var date = new Date();
      //存储各种时间格式,方便以后扩展
      var time = {
          date: date,
          year : date.getFullYear(),
          month : date.getFullYear() + "-" + (date.getMonth() + 1),
          day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
          minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + 
          date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
      }
      //要存入数据库的文档
      var post = {
          name: this.name,
          head: this.head,
          time: time,
          title:this.title,
          tags: this.tags,
          post: this.post,
          comments: [],
          reprint_info: {},
          pv: 0
      };
      //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //将文档插入 posts 集合
          collection.insert(post, {
            safe: true
          }, function (err) {
            mongodb.close();
            if (err) {
              return callback(err);//失败!返回 err
            }
            callback(null);//返回 err 为 null
          });
        });
      });
    };
    

      简化的形式出现:

    Post.prototype.save = function(callback) {
      //要存入数据库的文档
      var post = {
          name: this.name,
          head: this.head,
          time: this.time,
          title:this.title,
          tags: this.tags,
          post: this.post,
          comments: [],
          reprint_info: {},
          pv: 0
      };
      //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //将文档插入 posts 集合
          collection.insert(post, {
            safe: true
          }, function (err) {
            mongodb.close();
            if (err) {
              return callback(err);//失败!返回 err
            }
            callback(null);//返回 err 为 null
          });
        });
      });
    };
    

      

    //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //将文档插入 posts 集合
          collection.insert(post, {
            safe: true
          }, function (err) {
            mongodb.close();
            if (err) {
              return callback(err);//失败!返回 err
            }
            callback(null);//返回 err 为 null
          });
        });
      });
    

      调用db.coolection方法

     //打开数据库
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        //读取 posts 集合
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
         
        });
      });
    

    利用上面的db.collection()函数返回对象

     //将文档插入 posts 集合
          collection.insert(post, {
            safe: true
          }, function (err) {
            mongodb.close();
            if (err) {
              return callback(err);//失败!返回 err
            }
            callback(null);//返回 err 为 null
          });
    

      

    //一次获取十篇文章  count方法
     

      

    var query = {};
    if (name) {
      query.name = name;
    }
    //使用 count 返回特定查询的文档数 total
    collection.count(query, function (err, total) {
      //根据 query 对象查询,并跳过前 (page-1)*10 个结果,返回之后的 10 个结果
      collection.find(query, {
        skip: (page - 1)*10,
        limit: 10
      }).sort({
        time: -1
      }).toArray(function (err, docs) {
        mongodb.close();
        if (err) {
          return callback(err);
        }
        //解析 markdown 为 html
        docs.forEach(function (doc) {
          doc.post = markdown.toHTML(doc.post);
        });  
        callback(null, docs, total);
      });
    });

     distinct

    //distinct 用来找出给定键的所有不同值
          collection.distinct("tags", function (err, docs) {
            mongodb.close();
            if (err) {
              return callback(err);
            }
            callback(null, docs);
          });
    

      

    //返回含有特定标签的所有文章
    Post.getTag = function(tag, callback) {
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          //查询所有 tags 数组内包含 tag 的文档
          //并返回只含有 name、time、title 组成的数组
          collection.find({
            "tags": tag
          }, {
            "name": 1,
            "time": 1,
            "title": 1
          }).sort({
            time: -1
          }).toArray(function (err, docs) {
            mongodb.close();
            if (err) {
              return callback(err);
            }
            callback(null, docs);
          });
        });
      });
    };
    

      

    //返回通过标题关键字查询的所有文章信息
    Post.search = function(keyword, callback) {
      mongodb.open(function (err, db) {
        if (err) {
          return callback(err);
        }
        db.collection('posts', function (err, collection) {
          if (err) {
            mongodb.close();
            return callback(err);
          }
          var pattern = new RegExp(keyword, "i");
          collection.find({
            "title": pattern
          }, {
            "name": 1,
            "time": 1,
            "title": 1
          }).sort({
            time: -1
          }).toArray(function (err, docs) {
            mongodb.close();
            if (err) {
             return callback(err);
            }
            callback(null, docs);
          });
        });
      });
    };
    

      

  • 相关阅读:
    POJ 2672 Tarjan + 缩点 + 拓扑思想
    HDU1269迷宫城堡(裸Tarjan有向图求强连通分量个数)
    Tarjan求有向图强连通详解
    Jedis源代码探索
    多线程下使用Jedis
    Jedis分片连接池
    Jedis使用过程中踩过的那些坑
    jedis提纲
    jedis中的一致性hash算法
    字典:dict.c/dict.h
  • 原文地址:https://www.cnblogs.com/coding4/p/5597931.html
Copyright © 2011-2022 走看看