私信  •  关注

Alex Blex

Alex Blex 最近创建的主题
Alex Blex 最近回复了
5 年前
回复了 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 ]
           }
        }
     }
   }
)
4 年前
回复了 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
}