有没有办法将值与mongodb集合中文档中的每个数组和子文档进行匹配并返回文档
{
"_id" : "2000001956",
"trimline1" : "abc",
"trimline2" : "xyz",
"subtitle" : "www",
"image" : {
"large" : 0,
"small" : 0,
"tiled" : 0,
"cropped" : false
},
"Kytrr" : {
"count" : 0,
"assigned" : 0
}
}
例如,如果在上述文件中我正在搜索xyz或" ab"或" xy"或" z"或" 0"这份文件应该退回。
我实际上必须使用C#驱动程序在后端实现这一点,但mongo查询也会有很大帮助。
请建议。
由于
答案 0 :(得分:8)
您可以使用' $ where'
执行此操作db.mycollection({$where:"JSON.stringify(this).indexOf('xyz')!=-1"})
我将整个记录转换为大字符串,然后搜索您的元素是否在结果字符串中。如果您的xyz在字段名中,可能无法工作!
你可以让它遍历字段来制作一个大字符串,然后搜索它。
这不是最优雅的方式,并且将涉及完整的表扫描。如果你仔细查看各个字段,它会更快!
答案 1 :(得分:4)
虽然Malcolm的上述答案可行,但当您的收藏量变大或流量很高时,您会很快看到这个问题。这是因为有两件事。首先,下载到javascript是一个大问题,其次,这将始终是一个全表扫描,因为$ where不能使用索引。
MongoDB 2.6引入了默认启用的文本索引(它在2.4版本中处于测试阶段)。有了它,您可以在文档中的所有字段上拥有全文索引。 documentation给出了以下示例,其中为每个字段创建了文本索引,并将索引命名为“TextIndex”。
db.collection.ensureIndex(
{ "$**": "text" },
{ name: "TextIndex" }
)