【问题标题】:MongoDB search to return only specific fieldsMongoDB 搜索仅返回特定字段
【发布时间】: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 对象数组

标签: mongodb pymongo


【解决方案1】:

在 searchCriteria 文档之后添加投影文档:

.find(searchCriteria, projection)

您已经有了 searchCriteria,只需添加如下投影文档,其中 1 表示显示该字段,0 表示不显示该字段:

{_id: 0, username: 1, foo: 1}

【讨论】:

  • 但这也显示了一个费用描述字段,其中没有搜索词:'Hello'
  • 尝试将 'Expenses.description': 1 添加到投影文档中。
  • 试过了,仍然返回所有 Expenses.description 字段,即使是那些没有 Hello' 字符串的字段。
  • 怎么样... {'Expenses': 0, 'Expenses.description': 1} 我正在使用手机,或者我会自己测试一下。如果这不起作用,请尝试单独关闭数组中的每个字段。
  • 很遗憾,我需要看看如何排除 Expenses.description 字段中没有“Hello”的所有字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
相关资源
最近更新 更多