Arrays 在Mongo中匹配数据库文档数组中的每个元素
在Mongo中是否有方法匹配数据库文档数组中的每个元素 例如,对于文档:Arrays 在Mongo中匹配数据库文档数组中的每个元素,arrays,mongodb,Arrays,Mongodb,在Mongo中是否有方法匹配数据库文档数组中的每个元素 例如,对于文档: { Stuff: ['chicken', 'stock'] } 是否有一个查询会以某种方式接受输入['chicken'、'flavored'、'stock']并返回此文档,但不会以输入['chicken']返回此文档?实际上,文本索引应该在这里有所帮助,因为它是一个OR匹配,可以按分数排序,以便很容易找到最佳匹配的结果。搜索词越多,得分越高。此外,文本搜索还提供词干和停止词。在给出的示例中,这意味着鸡和鸡将给出相
{
Stuff: ['chicken', 'stock']
}
是否有一个查询会以某种方式接受输入['chicken'、'flavored'、'stock']并返回此文档,但不会以输入['chicken']返回此文档?实际上,文本索引应该在这里有所帮助,因为它是一个OR匹配,可以按分数排序,以便很容易找到最佳匹配的结果。搜索词越多,得分越高。此外,文本搜索还提供词干和停止词。在给出的示例中,这意味着鸡和鸡将给出相同的结果
db.yourCollection.ensureIndex({"Stuff":"text"})
db.yourCollection.find({ $text: { $search:"chicken stock", $language:"en" } },{ score: { $meta: "textScore" } })).sort( { score: { $meta: "textScore" } } ).limit(whatEverYouDeemAppropriateInt)
请参阅以了解更多详细信息。您可以通过组合多个运算符来执行双重否定,这在您的头脑中有点难以跟踪,至少对我来说是这样的!: //查找只包含“chicken”或“stock”元素的文档 test.find{Stuff:{$not:{$elemMatch:{$nin:['chicken','stock']}} 因此,带有$nin的$elemMatch将查找Stuff数组的单个元素不在字符串集中的文档,然后父$not反转匹配以返回与任何元素都不匹配的所有文档 从以下文件开始: db.test.insert[ {Stuff:['chicken']}, {东西:['鸡','股票]}, {材料:['鸡肉','调味','股票]] ] 上述查询返回: { _id:Objected53Dec1C5393FA0461F92334C, 材料:[ 鸡 ] } { _id:Objected53Dec1C5393FA0461F92334D, 材料:[ 鸡 股票 ] } 但是,请注意,这也将返回缺少内容或没有元素的文档。要排除需要在确保Stuff至少有一个元素的限定符中添加$and的元素,请执行以下操作: db.test.find{$and:[ {Stuff:{$not:{$elemMatch:{$nin:['chicken','stock']}}, {'Stuff.0':{$exists:true} ]}
你能澄清你需要的行为吗?为什么[a,b,c]应该返回[a,b]而不是[a]?你应该写规则。