2013-05-03 49 views
0

我正试图找到让MongoDb在所有文档字段中查找特定值的最佳方法。例如,如果我有两个文件:在任何字段中查找包含搜索字符串的文档

{ 
    field1: "value1" 
    field2: "value2" 
} 

{ 
    field3: "value3" 
    field4: "value1" 
} 

和查询字符串“值1”这两个文件将被退回。

如果在MongoDb中没有办法做到这一点,那么在数据库或代码级别实现它的最佳策略是什么?我尝试在C#中创建一个getter,它遍历所有映射实体的属性,并返回一个数组,并将此数组存储在数据库中,但IMO却是效率低下且难看的解决方案。

+0

[这里有一个可行的答案(http://stackoverflow.com/a/19802670/825421)从重复的问题(虽然该解决方案可能对你来说太慢)。 – 2013-11-13 18:27:48

回答

1

在MongoDB中没有办法直接做到这一点。

拥有无限的字段名称可能是您的模式需要重新工作的标志。你有没有考虑将你的动态字段名称改为嵌入对象的值?如:

fields: [{name: "field1", value: "value1"}, {name: "field2", value: "value2"}] 

然后将查询看起来像:

db.coll.find({'fields.value': 'value1'}); 
+0

在客户突然要求我进行全场搜索之前,模式没有问题,所以现在我需要找到一种方法来实现它。我有几个映射到mongodb集合的c#类,并将其重构为键值对的数组似乎太硬核了:-)我试图让我在问题中描述的更轻量级的解决方案,但我仍然希望找到更简单的方法 – jezzarax 2013-05-03 21:15:04

相关问题