Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Mongo中匹配数据库文档数组中的每个元素_Arrays_Mongodb - Fatal编程技术网

Arrays 在Mongo中匹配数据库文档数组中的每个元素

Arrays 在Mongo中匹配数据库文档数组中的每个元素,arrays,mongodb,Arrays,Mongodb,在Mongo中是否有方法匹配数据库文档数组中的每个元素 例如,对于文档: { Stuff: ['chicken', 'stock'] } 是否有一个查询会以某种方式接受输入['chicken'、'flavored'、'stock']并返回此文档,但不会以输入['chicken']返回此文档?实际上,文本索引应该在这里有所帮助,因为它是一个OR匹配,可以按分数排序,以便很容易找到最佳匹配的结果。搜索词越多,得分越高。此外,文本搜索还提供词干和停止词。在给出的示例中,这意味着鸡和鸡将给出相

在Mongo中是否有方法匹配数据库文档数组中的每个元素

例如,对于文档:

{
    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]?你应该写规则。