如何实现bookname,isbn和author的搜索?

时间:2017-02-16 23:25:47

标签: node.js mongodb mongoose

我正在开发一个Node - MongoDb后端,用于图书搜索应用程序。我正在存储书籍信息,如ISBN,作者,标题,出版商,位置等。我实施了标题搜索如下:

const bookTitle= new RegExp(escapeRegex(request.params.query), 'gi');

然后使用.find方法进行{title:bookTitle}搜索。

我想从高层次了解如何使其成为可能,以便用户可以输入author,isbn或标题,并能够在MongoDb中搜索这些属性。

我正在考虑检查查询是否是一个10位数的数字,然后在isbn搜索那个案例?我在正确的轨道上吗?

1 个答案:

答案 0 :(得分:0)

当然,有多种解决方案。假设您要执行<testfile.txt a.exe 1 查询(即,返回查询字词与ORauthortitle匹配的结果),您可以使用正确的索引和the $or运算符。

我可能会从一个集合中开始,这个集合突破了这些领域中的每个人:

ISBN

您需要在每个字段上添加索引...查看{ "_id" : 7, "title" : "coffee and cream", "author" : "John Doe", "isbn" : 12312318 } db.articles.createIndex( { author : 1 } ) db.articles.createIndex( { isbn : 1 } ) db.articles.createIndex( { title: "text" } ) 索引类型和$text queries,这对{{1}真正有帮助} field(注意,每个集合只能使用一个 text索引。另请阅读indexes work with $regex queries如何查询title

获得查询字词时,只需查询所有字段即可。然后,$text查询将返回与这些字段中的任何字段匹配的结果

example in the $text documentation并为此解决方案修改它...假设以下记录:

author

正在搜索作者:

$or

搜索标题:

{ "_id" : 1, "subject" : "coffee", "author" : "xyz", "views" : 50, "isbn" : 12312312 }
{ "_id" : 2, "subject" : "Coffee Shopping", "author" : "efg", "views" : 5, "isbn" : 12312313 }
{ "_id" : 3, "subject" : "Baking a cake", "author" : "abc", "views" : 90, "isbn" : 12312314 }
{ "_id" : 4, "subject" : "baking", "author" : "xyz", "views" : 100, "isbn" : 12312315 }
{ "_id" : 5, "subject" : "Café Con Leche", "author" : "abc", "views" : 200, "isbn" : 12312316 }
{ "_id" : 6, "subject" : "Сырники", "author" : "jkl", "views" : 80, "isbn" : 12312317 }
{ "_id" : 7, "subject" : "coffee and cream", "author" : "efg", "views" : 10, "isbn" : 12312318 }
{ "_id" : 8, "subject" : "Cafe con Leche", "author" : "xyz", "views" : 10, "isbn" : 12312319 }
{ "_id" : 10, "subject" : "The Coffee Book: Anatomy of an Industry from Crop to the Last Drop", "author" : "Nina Luttinger", "isbn" : 1595580603 }

您还可以在服务器端执行一些基本逻辑,以检查查询字词是否为整数,并从查询中删除> db.articles.find({ $or: [ { $text: { $search: "lutt" } }, { isbn: 'lutt' }, { author: /lutt/i } ] } ) { "_id" : 10, "subject" : "The Coffee Book: Anatomy of an Industry from Crop to the Last Drop", "author" : "Nina Luttinger", "isbn" : 1595580603 } 查询运算符 only {{ 1}}如果查询整数。这意味着上述查询根本不会包含> db.articles.find({ $or: [ { $text: { $search: "cafe" } }, { isbn: 'cafe' }, { author: /cafe/i } ] } ) { "_id" : 5, "subject" : "Café Con Leche", "author" : "abc", "views" : 200, "isbn" : 12312316 } { "_id" : 8, "subject" : "Cafe con Leche", "author" : "xyz", "views" : 10, "isbn" : 12312319 } 个查询列表中的isbn字段。