Mongo无法与Node.js一起使用

不要判断

我正在处理一个简单的问题,即使用Node.jsMongo数据库中插入一个集合但是,我面临两个问题:

1.当我在.insert函数
(以下:albums.insert(a1, {safe: false}, cb);
albums.insert(a2, {safe: false}, cb);)中使用{safe:true}时,集合不会插入数据库中,也就是说,当我这样做时,它们不会在终端上打印console.log(doc)(请参阅下文)的程序

2.程序本身不结束,我必须按CTRL + C结束它,即使它具有db.close()在末端,我可以看到“这里”印刷是在终端上console.logged之后db.close()

非常感谢任何帮助,谢谢!

var Db= require('mongodb').Db,
Connection= require('mongodb').Connection,
Server= require('mongodb').Server,
async= require('async');

var host= "localhost";
var port= Connection.DEFAULT_PORT;

var db= new Db("PhotoAlbums", new Server(host, port, {auto_reconnect: true,
        poolSize: 20}), {w: 1});

var a1= {_id: "Travel", name: "Travel", title: "Travelogues", description:        
"This was great", date: "1/1/2014"}, 
a2= {_id: "friends", name: "friends", title: "Friends", description:   
"Random Pics", dat: "2/1/2014"};

var albums, photos;

async.waterfall([

function(cb)
{
    db.collection("Albums", cb);    
}, 

function (albums_coll, cb)
{
    albums= albums_coll;
    db.collection("Photos", cb);
},

function (photos_coll, cb)
{
    photos= photos_coll;
    albums.insert(a1, {safe: false}, cb);
},

function (doc, cb)
{ 
    console.log("1. Successfully wrote ");
    console.log(doc);
    albums.insert(a2, {safe: false}, cb);   
},

function (docs, cb)
{ 
    console.log("2. Successfully wrote ");
    console.log(docs);
    cb(null);
},

], function(err, results)
{ 
    if(err)
     console.log("ERROR!");
    db.close();
    console.log("here");
});
尼尔·伦恩

本质上,您从未连接到数据库。Db对象需要.open()调用方法,并且所有交互都必须在该方法的提供的回调中或在“连接”事件处理程序中进行。

在某些概念中,您可能对这里有些不满意,我想让您直接理解。首先是修改后的清单:

var async = require('async'),
    MongoClient = require('mongodb').MongoClient;


MongoClient.connect('mongodb://localhost/test',function(err,db) {

  var a1 = {
    "_id": "Travel",
    "name": "Travel",
    "title": "Travelogues",
    "description": "This was great",
    "date": new Date("2014/01/01")
  },
      a2 = {
    "_id": "friends",
    "name": "friends",
    "title": "Friends",
    "description": "Random Pics",
    "date": new Date("2014/01/02")
  };

  var albums;

  async.waterfall(
    [
      function(cb) {
        db.collection("albums",cb);
      },

      function(albums_col,cb) {
        albums = albums_col;
        albums.insert(a1,cb);
      },

      function(doc,cb) {
        console.log("1. Successfully wrote");
        console.log(doc);
        albums.insert(a2,cb);
      },

      function(doc,cb) {
        console.log("2. Successfully wrote");
        console.log(doc);
        cb();
      }
    ],
    function(err,results) {
      if (err) throw err;
      db.close();
    }
  );
});

首先,您应该MongoClient在新代码中使用。这是所有语言的标准实现。Server如果需要,您仍然可以使用对象,但是连接字符串通常可以满足要求。交替:

MongoClient.connect( new Server( 
    "localhost",
    Connection.DEFAULT_PORT,
    { "auto_reconnect": true }
    { w: 1 }
),function(err,db) {

    {...}
});

另一部分是,我将删除默认情况下已设置的选项。更改连接池选项对于诸如此类的清单实际上并没有多大意义,但是5驱动程序中已经内置了默认连接,而未指定此连接。也是“ WriteConcern”或{ w: 1 }默认值。

其次,在为文档指定的结构中,使用实际日期对象。这些将作为BSON存储的“日期”类型序列化到MongoDB中,并且当作为真实日期对象读取时,它们也会返回到您的代码中。这就是您要处理的日期。否则,这些只是字符串,并不是很有用。

并不是为集合声明一个变量,而不是将参数传递给回调,但是为了简洁起见,不喜欢这样做。

请注意,此处省略{ safe: true }.insert()方法的WriteConcern部分除非您真的想覆盖已设置的连接设置(并且您几乎不希望这样做),否则您可能只想使用默认设置。“安全”选项也已弃用,因此您应该编写{ w: 0 }等效的选项。

但最后要注意的是,如果您确实选择{ w: 0 }了该选项,那么将不会返回所编写文档的预期“响应”。该值将被报告为null即使已将其写入数据库。这是因为这种“不安全”的编写方式不需要数据库的任何确认。因此,您只是假设它已经存在,因此可能想要默认值{ w: 1 }已经存在,这意味着它已得到确认。

然后输出如预期的那样:

1. Sccessfully wrote
[ { _id: 'Travel',
    name: 'Travel',
    title: 'Travelogues',
    description: 'This was great',
    date: Wed Jan 01 2014 00:00:00 GMT+1100 (AEDT) } ]
2. Sccessfully wrote
[ { _id: 'friends',
    name: 'friends',
    title: 'Friends',
    description: 'Random Pics',
    date: Thu Jan 02 2014 00:00:00 GMT+1100 (AEDT) } ]

当然,根据实际时区的不同,您需要使用字符串输出。还要指出的是形式new Date("2014/01/01")new Date("2014-01-01")不相等。第一个将日期构造为UTC时区对象,第二个将日期构造为您的本地时区。MongoDB将存储一个UTC,因此最好确保对您存储的任何数据都以这种方式构成您的构造。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

setTimeout无法与node.js一起使用

来自分类Dev

Mongodb无法与Node.js一起使用

来自分类Dev

Node.js无法与Intellij Idea一起使用

来自分类Dev

将Node JS库与QML一起使用

来自分类Dev

使webfontloader与node.js和jsdom一起使用

来自分类Dev

如何配置vagrant与node.js一起使用

来自分类Dev

与Node.js一起使用Piwik

来自分类Dev

与Node.js一起使用Piwik

来自分类Dev

将String.raw()与Node JS一起使用

来自分类Dev

Faye通过HTTPS与Node.js一起使用

来自分类Dev

将GET与Node.js一起使用

来自分类Dev

无法使“ Hello World”与Angular JS一起使用

来自分类Dev

jQuery无法与Vue.js一起使用

来自分类Dev

onmouseover无法与React.js一起使用

来自分类Dev

pdf.js无法与<!DOCTYPE HTML>一起使用

来自分类Dev

React JS无法与Internet Explorer 9一起使用

来自分类Dev

无法获取与联合js一起使用的html元素

来自分类Dev

js canvas drawImage无法与循环变量一起使用

来自分类Dev

我无法使inputmask与Vanilla JS一起使用

来自分类Dev

require.js无法与MVC一起使用

来自分类Dev

无法使“ Hello World”与Angular JS一起使用

来自分类Dev

getElementById无法与pageslide.js一起使用

来自分类Dev

pdf.js无法与<!DOCTYPE HTML>一起使用

来自分类Dev

jQuery .addClass()无法与Angular.js一起使用

来自分类Dev

简单的JS / JSON无法与Angular一起使用

来自分类Dev

jQuery无法与meteor.js一起使用

来自分类Dev

无法将Phusion Passenger与Sails.js / Node.js一起使用POST表单

来自分类Dev

setTimeout无法在Node.js中与Monq一起使用

来自分类Dev

Ajax成功和错误处理程序无法与Node.js一起使用