mongodb - Mongoose 聚合匹配和 addfield 与提供的列表索引
问题描述
我需要根据我传入的数组的索引来更新文档的字段顺序。但是当我调用这个API时,最终结果是[],并且数据库中没有预期的变化。需要你的建议
我传入的数组是:
[“5c1b9f2b66922a77ec7116a1”,“5c1b9d4a66922b77ec81169f”]
exports.update_item_order = (req, res, next) => {
const idList = req.body.idList;
if (!idList) {
res.status(400).json({
message: "Missing request paramaters"
});
}
vouchers.aggregate([{
"$match": {
"_id": {
"$in": idList
}
}
}, {
"$addFields": {
"order": {
"$indexOfArray": [idList, "$_id"]
}
}
}, {
"$sort": {
"order": 1
}
}]).exec((err, result) => {
if (err) {
return res.status(500).json();
}
return res.status(200).json({
message: 'Status update successfully',
result
})
})
};
我从中检索的样本集合
解决方案
您需要遍历ids
数组并将它们转换为猫鼬ObjectId
import mongoose from 'mongoose'
const ids = ["5c1b9f2b66922a77ec7116a1", "5c1b9d4a66922b77ec81169f"].map(id => mongoose.Types.ObjectId(id))
vouchers.aggregate([
{ "$match": { "_id": { "$in": ids }}},
{ "$addFields": {
"order": {
"$indexOfArray": [ids, "$_id"]
}
}},
{ "$sort": { "order": 1 }}
])
推荐阅读
- python - Python如何旋转这个表
- flutter - 我可以在使用 setState 时制作模块化的小部件类吗?
- ansible - 在 ansible 中为特定任务使用密钥文件
- python - 如何在 mac Mojave 中安装 pycaret python 库
- amazon-web-services - 有没有办法通过 Terraform 按计划将代码从 AWS CodeCommit 提取到 EC2 实例?
- python - 在 Django 中更改日期格式
- r - ggplot:一些 Unicode 形状可以工作,而另一些则不能
- python - 使用 Auto_Arima 更好地拟合测试数据
- python-2.7 - Python,将 --junitxml 传递给 pytest.main()
- ruby - 使用 savon 连接到 SOAP API 并指定域