【问题标题】:Assign value to a NodeJS variable with respect to MongoDB document array将值分配给相对于 MongoDB 文档数组的 NodeJS 变量
【发布时间】:2020-09-08 04:05:16
【问题描述】:

我有一个包含以下文档的 MongoDB 集合

> db.mycol.find()
{ "_id" : ObjectId("5ec6506171ae442136aa97d2"), "uname" : "mail1", "port" : 1000, "abc" : "test1" }
{ "_id" : ObjectId("5ec659e6c0b1cc11370d8378"), "uname" : "mail2", "port" : 1001, "abc" : "test2" }

在下面的代码中,我试图通过在 NodeJS 中使用 distinct 来获取文档字段 port 的数组。

var nextPort=0;
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydb");
    dbo.collection("mycol").distinct('port', function(err, result) {
      if (err) throw err;
      console.log(result);
      db.close();
    });
  });

上面的代码给出了一个输出[ 1000, 1001 ] 现在,我有一个名为nextPort 的变量,我希望它具有已经存在的端口的下一个值(应该是唯一且未使用的),即如果数组的最后一个元素是1001,那么nextPort=1002

如何将数组元素中的下一个值(唯一)分配给我的变量。还有一种方法可以在文档字段port 中拥有所有唯一值,就像我们在MySQL 中拥有primary key 一样

【问题讨论】:

    标签: javascript arrays node.js mongodb mongodb-query


    【解决方案1】:

    不确定这是否会有所帮助,但您可以尝试将输出分配给变量,例如“数组”。然后使用 nextPort = array[array.length-1]+1 请参阅下面的代码示例:

    let nextPort=0; 
    let arr = [1000, 1001];
    nextPort = arr[arr.length-1]+1
    

    或者如果你想让 nextPort 成为一个数组:

    let nextPort=[]; 
    let arr = [1000, 1001];
    nextPort.push(...arr, arr[arr.length-1]+1);
    

    上面的代码假设你的 Mongo 代码总是返回一个数字。

    【讨论】:

    • 我需要你帮忙做另一件事。所以基本上我有一个使用nextPort的同步函数(一个子进程),因为它是一个同步方法,它优先于我定义nextPort值的函数。需要解决这个问题。在 cp 中,nextPort 值设置为 0。我已经更新了代码。请看一下
    • 所以我想要的是 - 使整个函数同步 MongoClient.connect(url, function(err, db)
    • 嗯。原谅我的无知,但你为什么要让它同步而不是异步呢?您的目标是并行创建/启动多个容器吗?
    • 是的,我计划创建多个容器。我计划配置的 MongoDB 实例将端口号作为 nextPort 的值。作为 sych 函数中的子进程,它优先于上面的函数(nextPort=0)。这是我希望上述函数优先于 execSync 的唯一原因。
    • 我不知道。但我相当肯定 mongoconnect 是异步的,这实际上可能是一件好事,它可以确保你永远不会覆盖端口号或更糟的东西。希望你来对了。这里有一些超级聪明的人,我相信他们可以毫不费力地回答
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多