zoukankan      html  css  js  c++  java
  • MongoError: server instance in invalid state undefined 解决办法

    MongoDB关键点集锦(更新中...)

     2017-01-20 09:33:48[其它数据库]点击数:15作者:Real_Bird的博客来源: 网络
    随机为您推荐的文章:MongDB索引的介绍及使用

    索引的重要性,应该无需多说了,它可以优化我们的查询,而且在某些特定类型的查询中,索引几乎是必不可少的。这篇文章主要介绍了MongoDB中的几种常见的索引以及在使用时候的一些注

    1、MongoError: server instance in invalid state undefined

    参考segmentfault的一个解答

    看起来你用的是node-mongodb-native驱动。老版本确实有使用过DB作为顶级对象,不过现在的驱动通常建议把MongoClient用为顶级对象使用。直接参考驱动文档: 
    https://github.com/mongodb/node-mongodb-native#connecting-to-mongodb 
    注意MongoClient维护着连接池,所以通常当你的应用退出前都可以不要关闭,保留一个单例的MongoClient一直用就可以了。

    我按照这个建议后,确实修复了这个问题。修改后的代码如下(关键代码):

    // 使用mongoClient作为顶级对象,而不是require('mongodb')
    var mongodbClient = require('mongodb').MongoClient;
    
    // 连接数据库取代了db.open(...)
    mongodbClient.connect(url, function(err, db) {
        if(err) {
          return callback(err);
        }
        var collection = db.collection('posts');
        collection.insertOne(post, function(err) {
          if(err) {
            return callback(err);
          } 
          callback(null);
          db.close();
        })
      })
    
    

    通过collection操作数据库的方法。我打印了collection.__proto__,如下所示:

    { collectionName: [Getter],
      namespace: [Getter],
      readConcern: [Getter],
      writeConcern: [Getter],
      hint: [Getter/Setter],
      find: [Function],
      insertOne: [Function],
      insertMany: [Function],
      bulkWrite: [Function],
      insert: [Function],
      updateOne: [Function],
      replaceOne: [Function],
      updateMany: [Function],
      update: [Function],
      deleteOne: [Function],
      removeOne: [Function],
      deleteMany: [Function],
      removeMany: [Function],
      remove: [Function],
      save: [Function],
      findOne: [Function],
      rename: [Function],
      drop: [Function],
      options: [Function],
      isCapped: [Function],
      createIndex: [Function],
      createIndexes: [Function],
      dropIndex: [Function],
      dropIndexes: [Function],
      dropAllIndexes: [Function],
      reIndex: [Function],
      listIndexes: [Function],
      ensureIndex: [Function],
      indexExists: [Function],
      indexInformation: [Function],
      count: [Function],
      distinct: [Function],
      indexes: [Function],
      stats: [Function],
      findOneAndDelete: [Function],
      findOneAndReplace: [Function],
      findOneAndUpdate: [Function],
      findAndModify: [Function],
      findAndRemove: [Function],
      aggregate: [Function],
      parallelCollectionScan: [Function],
      geoNear: [Function],
      geoHaystackSearch: [Function],
      group: [Function],
      mapReduce: [Function],
      initializeUnorderedBulkOp: [Function],
      initializeOrderedBulkOp: [Function] }
    2、mongodb更新一个数组,如commets是一个数组,添加comment
    collection.update({
      "name": name,
    }, {
      $push: {"comments": comment}
    })
    3、distinct(key, query, options, callback){Promise}

    查询集合返回一个带有key键的值组成的列表,列表的值是不重复的。其中每个集合需要满足query条件。

    var MongoClient = require('mongodb').MongoClient,
        test = require('assert');
    MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
    
      // 创建集合
      var collection = db.collection('distinctExample2');
    
      // 插入多个文档
      collection.insertMany([{a:0, b:{c:'a'}}, {a:1, b:{c:'b'}}, {a:1, b:{c:'c'}},
        {a:2, b:{c:'a'}}, {a:3}, {a:3}, {a:5, c:1}], {w:1}, function(err, ids) {
    
        // 返回含有c是1的集合的a属性的值组成的列表。 [5]
        collection.distinct('a', {c:1}, function(err, docs) {
          test.deepEqual([5], docs.sort());
    
          db.close();
        });
      })
    });
    4、查询所有tags中包含tag的文档。tags是数组 [‘a’, ‘b’, ‘c’]的形式
    collection.find({tags: 'a'}) // 这样也可以查询到这个集合
    5、使用$inc增加某个字段
    // 查询到这个文档,将`pv`字段加1,如果不存在`pv`字段,则创建pv字段,初始值为0,并加1
    collection.updateOne({
      "name": name,
      "time.day": day,
      "title": title
    }, {
      $inc: {"pv": 1}
    }, function(err) {
      if(err) {
        return callback(err);
      }
      db.close();
    })
    6、mongodb分页,主要用到countskiplimit属性
    Post.getTen = function(name, page, callback) {
      mongodbClient.connect(url, function(err, db) {
        if(err) {
          return callback(err)
        }
        var collection = db.collection('posts');
        var query = {};
        if(name) {
          query.name = name;
        }
    
        // 对于一个query对象,首先使用`count()`来查询到总数目,结果值赋给参数`total`,比如`total`是93,然后使用`find()`查询,并跳过(page-1)*10个结果,返回之后的10个结果,按时间(`time`)降序排序。1是升序,也是默认的。-1是降序
    
        collection.count(query, function(err, total) {
          collection.find(query).skip((page - 1) * 10).limit(10).sort({
            time: -1
          }).toArray(function(err, docs) {
            if(err) {
              return callback(err);
            }
            callback(null, docs, total);
            db.close();
          })
        })
      })
    }

    以上就是MongoDB关键点集锦(更新中...)的全文介绍,希望对您学习和使用数据库有所帮助.



    • 相关阅读:
      最长公共子序列算法问题代码(使用JavaScript实现)
      硬币找零问题算法几种不同的代码实现方式(使用Python实现)
      基数排序(使用Python实现)
      桶排序(使用Python实现)
      减法要用 signed 型
      16系列和18系列的不同
      Proteus中常用元器件名字
      数值类型
      PIC单片机之时钟设置
      MOS管使PIC单片机不能正常运行
    • 原文地址:https://www.cnblogs.com/wxmdevelop/p/7517670.html
    Copyright © 2011-2022 走看看