如何保持方法直到数组在mongodb中有2个元素
Posted
技术标签:
【中文标题】如何保持方法直到数组在mongodb中有2个元素【英文标题】:How to hold method untill array has 2 elements in mongodb 【发布时间】:2019-10-19 18:18:21 【问题描述】:我想保留该方法,直到数组使用 nodejs 和 mongodb 有 2 个或更多元素..
exports.Arrayelements = function(req, res)
var elementName = req.body.elementName;
connection.arrayelements.updateMany(, $push: sampleArray: [elementName] , upsert: true );
connection.arrayelements.find(, function(err, docs)
if(err) throw err;
if(docs[0].elementName.length >= 2)
// call this function
else
// want to call back again to push syntax until 2 or more elements in array
);
【问题讨论】:
我猜你需要投票,使用setInterval
或类似的
谢谢@Thilo,我会努力的。实际上是 node js 和 mongodb 的新手
【参考方案1】:
首先find 返回一个游标,如果您只需要第一个文档(docs[0]),它可以是connection.arrayelements.findOne()
或connection.arrayelements.find().next()
。
下一个问题是updateMany 和next 都接受回调或返回承诺。您没有在 sn-p 中使用 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
【讨论】:
以上是关于如何保持方法直到数组在mongodb中有2个元素的主要内容,如果未能解决你的问题,请参考以下文章
mongodb:如果元素不存在,则updateOne设置字符串数组,如果存在则保持不变