<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>模糊查询 on 月盾的博客</title>
    <link>https://blog.hopefly.top/tags/%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2/</link>
    <description>Recent content in 模糊查询 on 月盾的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 05 Nov 2016 05:51:40 +0000</lastBuildDate>
    <atom:link href="https://blog.hopefly.top/tags/%E6%A8%A1%E7%B3%8A%E6%9F%A5%E8%AF%A2/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Mongodb和mongoose模糊查询</title>
      <link>https://blog.hopefly.top/blogdetail/581d736c43c18f1b7ae3e3ff/</link>
      <pubDate>Sat, 05 Nov 2016 05:51:40 +0000</pubDate>
      <guid>https://blog.hopefly.top/blogdetail/581d736c43c18f1b7ae3e3ff/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;需求说明：在mongdb中使用模糊查询，就像sql中的like查询，在where条件中使用模糊匹配，当然最重要的是需要模糊查询的字符串是动态传入的&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;以一篇文章为例，content字段为文章内容，我们要查询文章内容中包含Nodejs关键字的文章&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;mongodb中查询&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;select * from articles where content like &amp;#39;%Nodejs%&amp;#39;;&#xA;db.articles.find( { content: /Nodejs/i } )&#xA;Article.find({ content: /Nodejs/i}, function (err, docs) {});&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这种写法是一种简写操作，需要注意的是不能带双引号，带了双引号就成了字符串。但是这种写法是用&lt;code&gt;/&lt;/code&gt;包裹了一个字符串类型的关键字，在实际程序是动态传入的，比如：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var a=&amp;#34;Nodejs&amp;#34; ;&#xA;Article.find({ content: /a/i}, function (err, docs) {});&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;此时会把&amp;quot;a&amp;quot;当做要查询的关键字而不是&amp;quot;Nodejs&amp;quot;，所以这时还是需要用到完整的查询方式，就是使用&lt;code&gt;$regex&lt;/code&gt;关键字，还有$options选项&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var text = &amp;#39;Nodejs&amp;#39;;//动态传入的变量&#xA;Article.find({ content: { $regex: text, $options: &amp;#39;i&amp;#39; }}, function (err, docs) {});&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;$options&lt;/code&gt;选项值：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;i 大小写不敏感&lt;/li&gt;&#xA;&lt;li&gt;m $regex包含正则^,$符号的表达式&lt;/li&gt;&#xA;&lt;li&gt;x 忽略空格&lt;/li&gt;&#xA;&lt;li&gt;s 允许逗点匹配所有字符串&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其实$regex就是正则表达式的写法&lt;/p&gt;&#xA;&lt;p&gt;查找数组中的字段：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;contacts&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;address1&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;张三&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;address2&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;李四&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        .....&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以通过&lt;code&gt;db.collection.find({&#39;contacts.name&#39;:{$regex:&#39;张&#39;}})&lt;/code&gt;获得&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
