在mongodb数据库中搜索

时间:2014-10-27 18:40:12

标签: node.js mongodb mongodb-query

我试图在数据库中搜索,但我没有得到任何结果,也无法找到错误, 我在控制台中得到一个空数组,但数据库中充满了包含" a"在这种情况下。

如果我试图在数据库中找到所有结果,我会看到所有结果,所以它在$ search或$ text中会破坏脚本。

非常感谢所有的帮助我已经坐了几天并且撕裂了我的头发!

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

var db;

MongoClient.connect("mongodb://localhost:27017/insights", function(err, database) {
  db = database;
  db.collection("textstore", {}, function(err, coll) {
  if (err != null) {
  db.createCollection("textstore", function(err, result) {
    assert.equal(null, err);
   });
   }
   db.ensureIndex("textstore", {
     document: "text"
   }, function(err, indexname) {
     assert.equal(null, err);
   });
  });
});

app.post("/search", function(req, res) {
  db.collection('textstore').find({"$text": {"$search": 'a'}}).toArray(function(err, items) {
   console.log(items)
  })
});

1 个答案:

答案 0 :(得分:2)

搜索MongoDB text index具有语言感知能力,默认语言为英语。语言意识意味着某些非常常见但通常毫无意义的词语会被忽略。英语中的单词a就是这样一个单词。这是t he relevant part from the documentation

  

MongoDB支持各种语言的文本搜索。文本索引删除特定于语言的停用词(例如英语,“the”,“an”,“a”,“and”等),并使用简单的语言特定后缀词干。

尝试通过明确地将语言设置为"none"来尝试搜索更有意义的内容或禁用语言感知。

 db.collection('textstore').find({"$text": {"$search": 'a', $language:"none"}})

顺便说一下,您还可以在创建索引时覆盖默认语言,甚至可以在文档和子文档级别覆盖它。有关详细信息,请check the documentation about specifying languages for text indexes