社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Alex Blex

Alex Blex 最近创建的主题
Alex Blex 最近回复了
6 年前
回复了 Alex Blex 创建的主题 » PHP mongoDB集群连接字符串不工作

MongoClient 很久以前就被弃用了,并且可能不支持新的副本集语法。

https://docs.atlas.mongodb.com/driver-connection/ 建议使用最新版本 Mongodb driver

$client = new MongoDB\Client('mongodb+srv:////username:password@urlToCluster/?ssl=true&authSource=admin');

修改应用程序以插入支持查询的格式的文档。再添加一个包含要搜索的坐标的字段:

{
    pickup: {
      coords: null
    },
    meetup: {
      coords: [ someLng, someLat ]
    },
    _search: {
      coords: [ someLng, someLat ]  
    }
  },
  {
    pickup: {
      coords: null
    },
    meetup: {
      coords: [ someLng1, someLat1 ]
    },
    _search: {
        coords: [ someLng1, someLat1 ]
    }
  },
  {
    pickup: {
      coords: [ someLng2, someLat2 ]
    },
    meetup: {
      coords: [ someLng3, someLat3 ]
    },
    _search: {
        coords: [ someLng2, someLat2 ]
    }
  }

此字段的索引:

db.collection.createIndex( { _search : "2dsphere" } )

搜索此字段:

db.collection.find(
   {
     _search: {
        $nearSphere: {
           $geometry: {
              type : "Point",
              coordinates : [  someLng4, someLat4 ]
           }
        }
     }
   }
)
6 年前
回复了 Alex Blex 创建的主题 » 如何在mongodb中保留方法直到数组有2个元素

首先 find 返回一个光标,如果您只需要第一个文档(docs[0]),则 connection.arrayelements.findOne({}) connection.arrayelements.find({}).next() .

下一个问题是 updateMany next 接受回扣或退回承诺您没有在代码片段中使用updateMany返回的承诺,这是一个错误您的find语句可能在更新发生之前返回结果,具体取决于竞赛条件。

最后,使用setInterval是不明智的如果你需要重复 updateMany 循环中的语句,直到find的结果与您的条件匹配为止—只需执行它使用async/await语法非常简单:

exports.Arrayelements = async function(req, res) {
    const elementName = req.body.elementName;
    do {
        await connection.arrayelements.updateMany({}, { $push: { sampleArray: [elementName] } }, { upsert: true });
        const doc = await connection.arrayelements.findOne({});
    } while(doc.elementName.length >= 2);
    // call this function
}