Mongoose中如何正确校验对象数组中是否存在两个指定模型键值对
问题原因
你当前的写法存在两处问题:
$all用于匹配数组包含所有指定的元素,此处搭配嵌套对象使用时,要求values数组存在与你写的{One: "One", Three: "Three"}完全相等的元素- MongoDB的嵌套对象匹配默认是精确匹配,要求字段数量、键名、键值完全一致,实际存储的嵌套对象额外包含
Two字段,因此匹配失败无返回结果。
修复方案
场景1:要求两个键值对存在于values数组的同一个嵌套对象中
使用$elemMatch操作符匹配同一数组元素的多字段条件,不会触发全对象精确匹配:
Model.find({ "values": { $elemMatch: { One: "One", Three: "Three" } } })
场景2:不要求两个键值对在同一个嵌套对象中
直接使用点路径指定字段匹配即可:
Model.find({ "values.One": "One", "values.Three": "Three" })
内容的提问来源于stack exchange,提问作者n33t
相关产品推荐
相关产品推荐

