6

在这里,我有一个书集:

 Book Id:001
 Book Name:C# step by step
 Book Description:Programming book on C#

 Book Id:002
 Book Name:Head First Java
 Book Description:Programming Book on Java

 Book Id:003
 Book Name:Steve Jobs
 Book Description:biography of Jobs

我的问题是如何在书籍描述中搜索所有带有“编程”一词的书籍?

我是 NoSQL 的新手,目前我只能使用 find() 来执行精确搜索,而不是关键字搜索。

4

3 回答 3

4

该文档有一章关于Mongo 中的全文搜索,建议将每个字符串拆分为单个单词的数组,以便您可以对其进行索引以便更快地查找。

{   Id:001,
    Name:"C# step by step",
    Description:"Programming book on C#",
    Description_tags: [
        "Programming",
        "book",
        "on",
        "C#"]
}

db.books.ensureIndex({Description_tags:1});

db.books.find(Description_tags:"Programming");

当速度不是问题并且您想避免更改数据结构时,您还可以使用正则表达式。但请记住,这扩展性很差:查找时间将与集合中的条目数成线性关系。

db.collection.find( {description: { $regex: "Programming"} } );
于 2012-11-28T13:55:44.677 回答
2

您可以在 a 的查询选择器中使用正则表达式find来执行此操作:

db.books.find({description: /Programming/})
于 2012-11-28T13:48:57.217 回答
0

在 mongoDB 中有很多使用关键字查找的方法,其中我喜欢Text-Search

  1. Book Name为和创建索引Book Description

    您需要为Book Nameex创建索引Book DescriptionTextdb.books.createIndex( { BookName: "text", BookDescription: "text" } )

  2. 现在只需通过以下方式查询您的文档db.books.find( { $text: { $search: "Programming" } } )

它可能会帮助您找到所有相关文档,其中包含来自Book Name和的编程关键字Book Description

于 2020-03-30T16:42:37.480 回答