【发布时间】:2025-12-02 20:10:01
【问题描述】:
我想使用 Mongodb 从数组中更新和拉取用户。
我正在成功更新数组中的用户并检查用户的长度。
如果用户数大于等于 2,我想对前 2 个用户进行切片,并使用 pull 方法从数组中移除前 2 个用户。
陌生人聊天连接示例(当两个用户按下连接陌生人按钮时连接他们)
var userName = req.body.userName
connection.connectedusers.updateMany({}, { $push: { connectArray: [userName] } }, { upsert: true }, function (err, docs) {
if (err) {
console.log(err);
} else {
connection.connectedusers.find({}, async (err, list) => {
if (err) {
console.log(err);
}
else {
setTimeout(async () => {
if (list[0].connectArray.length >= 2) {
clearTimeout();
var shortListed = list[0].connectArray.slice(0, 2);
console.log(shortListed,'shortlisted array')
try {
await connection.connectedusers.update({},
{ $pull: { connectArray: { $in: shortListed } } },
{ multi: true }
)
const docs = await connection.connectedusers.find({});
res.json({
message: 'users selected successfully',
status: 1,
docs: docs
});
} catch (err) {
res.status(201).json(err);
}
} else {
const docs = await connection.connectedusers.find({});
console.log(docs, 'docs')
const allUsers = docs.connectArray;
console.log(allUsers, 'allUsers')
await connection.connectedusers.update({},
{ $pull: { connectArray: { $in: allUsers } } },
{ multi: true }
)
res.json({
message: 'users not selected',
status: 2,
docs: docs,
allUsers: allUsers
})
}
}, 10000);
}
});
}
})
第一个post请求返回status 2 error : users not selected,所以想等一段时间。一旦数组计数增加到 2,我需要对其进行切片并从数组中提取选定的用户。
【问题讨论】:
-
用 Promises 代替 async await 怎么样?
-
我不知道如何使用承诺。这就是我使用异步等待的原因..
-
你能分享一个用户在你的数据库中的样子吗?
-
您在更新后和
setTimeout之前立即进行集合查找。如果你想以这种方式组织事物,则需要在设置超时后查找以确保文档在窗口中 -
我知道这不是你问的,但如果我是你,我可能会研究网络套接字以及其他人如何构建聊天应用程序。这对我来说似乎不是正确的做事方式
标签: node.js mongodb mongoose mean-stack mean