标签: node-mongodb-native

Bluebird Promisfy.each,有for循环和if语句吗?

现在,父for循环(m < repliesIDsArray.length)在第一个findOne触发之前完成,所以这只遍历repliesIDsArray..asynchronous的最后一个元素.

这个代码集的promisified版本的正确语法是什么?是新的promisification,并想知道如何启动这个promisify +循环通过数组+帐户的if语句..

蓝鸟是必需的,并被Promise.promisifyAll(require("mongoose"));称为.

for(var m=0; m<repliesIDsArray.length; m++){

objectID = repliesIDsArray[m];

Models.Message.findOne({ "_id": req.params.message_id},
    function (err, doc) {
        if (doc) {
         // loop over doc.replies to find the index(index1) of objectID at replies[index]._id
         var index1;
         for(var i=0; i<doc.replies.length; i++){
            if (doc.replies[i]._id == objectID) {
                index1 = i;
                break;
            }
         }
         // loop over doc.replies[index1].to and find the index(index2) of res.locals.username at replies[index1].to[index2]
         var index2;
         for(var j=0; j<doc.replies[index1].to.length; j++){
            if (doc.replies[index1].to[j].username === res.locals.username) {
                index2 …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js promise node-mongodb-native bluebird

12
推荐指数
1
解决办法
2万
查看次数

使用es7 async/await检查mongodb中是否存在文档

我正在尝试检查具有email提供的用户是否存在于集合中users,但我的函数对于每个调用都保持返回undefined.我使用es6并且async/await为了摆脱大量的回调.这是我的函数(它在一个类中):

async userExistsInDB(email) {
    let userExists;
    await MongoClient.connect('mongodb://127.0.0.1:27017/notificator', (err, db) => {
        if (err) throw err;

        let collection = db.collection('users');

        userExists = collection.find({email: email}).count() > 0;
        console.log(userExists);

        db.close();
    });
    console.log(userExists);
    return userExists;
}
Run Code Online (Sandbox Code Playgroud)

所以,调用console.log内部的第一个.connect总是返回,false因为返回的值.find不是数组,它是一个巨大的对象,如下所示:

{ connection: null,
  server: null,
  disconnectHandler: 
   { s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: {},
  ns: 'notificator.users',
  cmd: 
   { find: 'notificator.users',
     limit: 0,
     skip: 0,
     query: …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js node-mongodb-native ecmascript-7

12
推荐指数
1
解决办法
5556
查看次数

使用打字稿导入“mongodb”时出错

当编译任何只导入的 typescript 程序时mongodb,我收到 12 个错误,例如:

node_modules/mongodb/mongodb.d.ts:3309:5 - error TS2416: Property 'end' in type 'GridFSBucketWriteStream' is not assignable to the same property in base type 'WritableStream'
Run Code Online (Sandbox Code Playgroud)

使用节点 TLS (v16.13.1) 和一个空目录来重现很简单,只需运行:

npm i mongodb typescript
echo "import mongodb  from 'mongodb'" > index.ts
npx tsc index
Run Code Online (Sandbox Code Playgroud)

node-mongodb-native typescript

11
推荐指数
2
解决办法
5756
查看次数

为什么在mongodb-native驱动程序中有单独的mongo.Server和mongo.Db?

我只是在学习nodejs的mongodb-native驱动程序.

我这样连接.

var mongo=require("mongodb")

var serv=mongo.Server("localhost", 27017)
var dbase=mongo.Db("MyDatabase", serv)
Run Code Online (Sandbox Code Playgroud)

这很有效.但是,如果我尝试使用相同的服务器创建新的数据库连接,我会收到错误.

var dbase2=mongo.Db("MyDatabase2", serv)
Run Code Online (Sandbox Code Playgroud)

"错误:无法跨多个Db实例共享服务器或ReplSet实例"

但是如果首先建立新的服务器连接,它就可以工作.

var serv2=mongo.Server("localhost", 27017)
var dbase2=mongo.Db("MyDatabase2", serv2)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么有2个连接函数,一个用于Server,一个用于Db,当它们似乎必须一起使用时?

为什么不这样.

var dbase=mongo.Db("localhost", 27017, "MyDatabase")
Run Code Online (Sandbox Code Playgroud)

我想创建自己的功能,但是我想知道是否有其他原因它们是分开的.

谢谢.

javascript mongodb node.js node-mongodb-native

10
推荐指数
1
解决办法
2043
查看次数

如何在字符串字段中存储ISO日期的MongoDB集合上查询日期范围?

场景:考虑我正在调用一个集合MyCollection,其中包含以下数据:

{
    "_id" : 'MyUniqueID_01'
    "CreatedTime" : "2013-12-01T14:35:00Z",
    "LastModifiedTime" : "2013-12-01T13:25:00Z"
}
Run Code Online (Sandbox Code Playgroud)

现在我想查询MongoDB数据库,其中上述类型的数据存在于大量文档中.而我的查询使用基于日期范围,即$gt,$gte,$lt$lte

所以我的查询可能是这样的:

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}})
Run Code Online (Sandbox Code Playgroud)

考虑到上述示例预期结果,查询必须获取文档(因为"CreatedTime":"2013-12-01T14:35:00Z"大于查询中传递的值'2013-05-25T09:29:40.572 Z'); 但事实并非如此,问题是该字段CreatedTime是字符串格式.

问题:有没有什么方法可以在不更改字符串字段类型的情况下完美地获得我期望的结果?

json mongodb bson mongodb-query node-mongodb-native

10
推荐指数
1
解决办法
2万
查看次数

无法将Mongoose连接到Atlas

我总是连接到"admin"DB,这是一个固定的bug.

使用Mongoose 5.0.6 MongoDb 3.6并尝试连接到Atlas.

  1. 我的问题,Mongoose 5.0.6依赖什么驱动程序?
  2. 我怎样才能知道Mongoose何时会解决这个问题?
  3. 在另一个方向,有没有办法连接MongoDB然后使用这个连接与Mongoose?

干杯

mongoose mongodb node.js node-mongodb-native mongodb-atlas

10
推荐指数
1
解决办法
8733
查看次数

mongodb本机驱动程序获取没有数据库名称的集合名称

如何从nodeJS的mongodb本机驱动程序中获取没有数据库名称的集合名称?

db.collectionNames(function(err, collections) {
      if (err) {
        log.error(err);
      } else {
        log.info(collections);
      }
    });
Run Code Online (Sandbox Code Playgroud)

此代码返回如下内容:

databaseName.collection1,databaseName.collection2,databaseName.collection3

但我想得到名字: collection1, collection2, collection3

javascript mongodb node.js node-mongodb-native

9
推荐指数
2
解决办法
6177
查看次数

node-mongodb-native - 在每次调用期间,cursor返回null作为最后一个值

所以.我有一个非常基本的脚本,它连接到一个数据库,并find在一个包含大量文档的集合上执行,并将其限制为3个项目.一切都顺利进行,除了在我的结果结束时,a null和脚本没有终止,而是在成功后悄然关闭连接.

在这里,我声明我的参数并创建我的数据库对象:

var SERVER = 'localhost',
 PORT = 27017,
 DATABASE = 'test',
 COLLECTION = 'coll',
 mongo = require('mongodb'),
 db = new mongo.Db(DATABASE,
  new mongo.Server(SERVER, PORT, {auto_reconnect: true}),
  {});
Run Code Online (Sandbox Code Playgroud)

在这里,我连接到数据库并继续使用find游标和each函数查询它:

db.open(function(err, db) {
 if(err) throw err;
 var collection = new mongo.Collection(db, COLLECTION),
  cursor = collection.find({}, {}).limit(3);
 cursor.each(function(err, doc) {
  if(err) throw err;
  console.log(doc);
 });
 db.close();
});
Run Code Online (Sandbox Code Playgroud)

结果很好:

{ _id: '1',
  a: 'first object' }
{ _id: '2',
  a: 'second object' }
{ _id: …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js node-mongodb-native

8
推荐指数
2
解决办法
2885
查看次数

处理从nodejs到mongo db的丢失连接

当nodejs和mongodb服务器之间的连接丢失时,我试图得到"连接丢失"或类似的东西.我使用本机驱动程序并具有以下代码

var mongo = require('mongodb');
var server = new mongo.Server('host', 'port', {
    auto_reconnect: true,
    socketOptions: {
        keepAlive: 10,
        connectTimeoutMS: 1000,
        socketTimeoutMS: 0
    }
});
var db = new mongo.Db(
    'dbname',
    server,
    {
        w: 1,
        wtimeout: 1000,
        numberOfRetries: 100,
        auto_reconnect: true
    }
);

db.on('close', function () {
    console.log('Error...close');
});
db.on('error', function (err) {
    console.log('Error...error', err);
});
db.on('disconnect', function (err) {
    console.log('Error...disconnect', err);
});
db.on('disconnected', function (err) {
    console.log('Error...disconnected', err);
});
db.on('parseError', function (err) {
    console.log('Error...parse', err);
});
db.on('timeout', function (err) { …
Run Code Online (Sandbox Code Playgroud)

connection timeout mongodb node.js node-mongodb-native

8
推荐指数
1
解决办法
7838
查看次数

mongodb-nodejs-driver,DeprecationWarning:不推荐使用collection.count

我希望使用以下方法计算我的文档:

db.collection('posts').count()

但是,我渐渐衰弱了:

DeprecationWarning:collection.count已弃用,将在以后的版本中删除.请改用collection.countDocuments或collection.estimatedDocumentCount

这是我的mongodb nodejs驱动程序版本:

  "dependencies": {
    "mongodb": "^3.1.0"
  },
  "devDependencies": {
    "@types/mongodb": "^3.1.0",
    "chai": "^4.1.2",
    "mocha": "^5.1.1",
    "ts-node": "^7.0.0",
    "tslint": "^5.10.0",
    "typescript": "^2.9.2"
  }
Run Code Online (Sandbox Code Playgroud)

没有countDocumentsestimatedDocumentCountindex.d.ts文件中.

我该如何解决这个警告?

mongodb node-mongodb-native

8
推荐指数
2
解决办法
1万
查看次数