Mongo如何根据数组对象中的动态属性查找所有文档?
MongoDB 查询解决方案
需求1:查找prop1为"abc"的文档
直接用精确匹配语法即可:
// 匹配集合中prop1等于"abc"的文档 await db.collection.find({ prop1: "abc" })
如果你的实际需求是匹配集合中prop1值存在于外部arr数组的prop1字段中,先提取数组里的目标值列表,再用$in操作符:
// 提取arr中所有元素的prop1值 const targetProp1Values = arr.map(item => item.prop1); // 查询集合中prop1在目标列表内的文档 await db.collection.find({ prop1: { $in: targetProp1Values } })
需求2:查找所有prop1不为"abc"的文档
使用$ne操作符实现不等于匹配:
// 匹配集合中prop1不等于"abc"的文档 await db.collection.find({ prop1: { $ne: "abc" } })
如果是要排除arr数组中所有prop1的值,就用$nin操作符:
const targetProp1Values = arr.map(item => item.prop1); // 查询集合中prop1不在目标列表内的文档 await db.collection.find({ prop1: { $nin: targetProp1Values } })
错误写法说明
你之前写的{prop1: "arr.$.prop1"}是无效的——MongoDB会把字符串"arr.$.prop1"当作字面量去匹配prop1的值,而非引用外部数组的属性。要使用外部数组的动态值,必须先提取出目标值列表,再结合MongoDB的查询操作符实现。
内容的提问来源于stack exchange,提问作者user6377312
相关产品推荐
相关产品推荐

