【发布时间】:2015-05-02 13:04:46
【问题描述】:
我正在使用 MongoDB 中的 $text 功能来搜索某些单词,并希望结果不是返回整个文档,而是仅返回该单词出现的特定字段。
我创建了Text index:
db.Info.ensure_index(
[("Expenses.description", 'text'),
("fullName_normal", 'text')],
name="searchAll"
)
然后进行如下搜索:
text_results = db.Info.find_one({'$and': [{'$text': {'$search': "Hello"}, 'Username': 'John Doe'}]})
这仅返回整个文档,我只想要出现“Hello”的特定字段。
文件如下:
{
"_id": {
"$oid": "54eb8555ccab9321bca808bf"
},
"fullName_normal": "username Hello",
"Expenses":[
{"description": "Hello",
"Title": "Widgets",
"ExpID": "mrsjxKvcSISbFQSSFvZI9g==",
"Paid": "yes"
}
],
"Username": "John Doe",
"Supplier": "no"
}
【问题讨论】:
-
您在哪些字段上添加了文本索引?
-
@chridam,刚刚用字段更新了我的问题
-
只需在您的 find_one 方法
db.Info.find_one({'$and': [{'$text': {'$search': "Hello"}, 'Username': 'John Doe'}]}, {"Expenses.description": 1, "fullName_normal": 1})中投影相同的字段@ -
这也会返回没有“Hello”的
Expenses.description字段 -
'Expenses' 是一个 dict 对象数组