MongoDB 发现 $in 排序问题
Posted
技术标签:
【中文标题】MongoDB 发现 $in 排序问题【英文标题】:MongoDB find $in sorting issue 【发布时间】:2021-02-01 13:07:10 【问题描述】:我需要从 ID 位于数组中的 MongoDB 集合中获取文档:
[
'5f80a44d0179262f7c2e6a42',
'5f8c00762fae890e9c4d029c',
'5f802cf8abac1116a46bf9d4'
]
问题是,文档不是按我的阵列 ID 的顺序出现的。对于上述数组 ID,它们将出现 (1, 0, 2)。
如何按照我的 ID 数组顺序制作它们?我正在使用 NodeJs + Mongoose。
我的代码:
var ids = ['5f80a44d0179262f7c2e6a42','5f8c00762fae890e9c4d029c','5f802cf8abac1116a46bf9d4']
Product.find(
_id:
$in: ids
)
【问题讨论】:
【参考方案1】:我认为 find()
或 MongoDB 中与此相关的任何可用功能都不可能实现,
aggregate()
是可能的,但这只会满足您的预期结果,
我不建议使用它,因为这会影响查询响应的性能,这可能是一个繁重的事务。
$match
你的条件
$group
通过 null 并在 root
中创建所有匹配对象的数组
$addFields
添加我们搜索的 ids 数组
$unwind
解构ids数组,这将按照我们在ids数组中提供的顺序解构
$project
, $reduce
作为根数组输入并检查条件,如果 id 匹配则返回对象
$replaceWith
将根对象替换为根
var ids = [
ObjectId("5f802cf8abac1116a46bf9d4"),
ObjectId("5f8c00762fae890e9c4d029c"),
ObjectId("5f80a44d0179262f7c2e6a42")
];
Product.aggregate([
$match: _id: $in: ids ,
$group:
_id: null,
root: $push: "$$ROOT"
,
$addFields: ids: ids ,
$unwind: "$ids" ,
$project:
root:
$reduce:
input: "$root",
initialValue: ,
in: $cond: [ $eq: ["$$this._id", "$ids"] , "$$this", "$$value"]
,
$replaceWith: "$root"
])
Playground
【讨论】:
以上是关于MongoDB 发现 $in 排序问题的主要内容,如果未能解决你的问题,请参考以下文章
???????????????????????? - ???????(IN MONGODB)
mongod 命令执行发现已经有进程在运行mongod数据库--errno:48 Address already in use for socket: 0.0.0.0:27017