MongoDB聚合查询中匹配数组对象_id属性的方法求助
解决MongoDB聚合查询中匹配数组对象内ObjectId的问题
问题根源:你使用的
$in数组内是字符串类型ID,但集合中abc._id是ObjectId类型,类型不匹配导致查询无结果。正确聚合查询写法(Mongo Shell环境):
db.collection.aggregate([ { $match: { 'abc._id': { $in: [ObjectId("someId"), ObjectId("someId2")] } } } ])代码环境(如Node.js)适配写法:
先引入ObjectId构造函数,再构造查询:const { ObjectId } = require('mongodb'); // 或从mongoose导入 db.collection.aggregate([ { $match: { 'abc._id': { $in: [new ObjectId("someId"), new ObjectId("someId2")] } } } ])复杂场景通用写法:
若需要更灵活的匹配逻辑,可通过$expr结合$anyElementTrue和$map判断数组内是否存在符合条件的元素:db.collection.aggregate([ { $match: { $expr: { $anyElementTrue: { $map: { input: "$abc", as: "item", in: { $in: ["$$item._id", [ObjectId("someId"), ObjectId("someId2")]] } } } } } } ])
内容的提问来源于stack exchange,提问作者Patryk
相关产品推荐
相关产品推荐

