Javascript 针对MongoDB文档数组为NodeJS变量赋值

Javascript 针对MongoDB文档数组为NodeJS变量赋值,javascript,arrays,node.js,mongodb,mongodb-query,Javascript,Arrays,Node.js,Mongodb,Mongodb Query,我有一个MongoDB集合,其中包含以下文档 > db.mycol.find() { "_id" : ObjectId("5ec6506171ae442136aa97d2"), "uname" : "mail1", "port" : 1000, "abc" : "test1" } { "_id" : ObjectId("5ec659e6c0b1cc11370d8378"), "uname" : "mail2", "port" : 1001, "abc" : "test2" } 在下面的代

我有一个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();
    });
  });
上述代码给出了一个输出
[10001001]
现在,我有一个名为
nextPort
的变量,我希望它具有现有端口的下一个值(应该是唯一且未使用的),即如果数组的最后一个元素是
1001
,则
nextPort=1002


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

中的
主键一样,不确定这是否有帮助,但您可以尝试将输出分配给一个变量,比如“array”。然后使用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,函数(err,db)嗯。请原谅我的无知,但为什么要使其同步而不是异步?您的目标是并行创建/启动多个容器吗?是的,我计划创建多个容器。我计划设置的MongoDB实例将端口号作为nextPort的值。作为sych函数中的子进程,它可以kes优先于上述功能(nextPort=0)。这是我希望上面的函数优先于execSync的唯一原因。我不知道。但我相当确定mongoconnect是异步的,这实际上可能是一件好事,它可以确保您永远不会覆盖端口号或任何更糟的内容。希望您做得对。我相信这里有一些非常聪明的人可以回答不费吹灰之力