簡體   English   中英

MongoDB正則表達式搜索 - 從使用javascript驅動程序和NodeJS開始

[英]MongoDB Regular Expression Search - Starts with using javascript driver and NodeJS

我正在使用nodejs的JavaScript mongodb驅動程序。 我想在我的JavaScript函數中執行此查詢:

db.mycollection.find({Zip:/^94404/}); 

mongo客戶端檢索8個符合此條件的文檔。 但是我的JavaScript代碼不能獲取任何文檔。

DataProvider.prototype.findByZipcode = function(zipCode, callback) {
        this.getCollection(function(error, collection) {
            if (error)
                callback(error);
            else {
                var qs = '{Zip:/^'+zipCode+'/}';
                collection.find(qs).toArray(function(error, results) {
                    if (error)
                        callback(error);
                    else
                        callback(null, results);
                });
            }
        });
    };

我也試過了

<pre>
var qs = {Zip: '/^'+zipCode+'/'};
</pre>

順便說一句,我發現完全匹配工作正常,但這不是我想要的。

即。

<pre>
var q = {'Zip' :zipCode};
</pre>

你幾乎擁有它。 你一直在字符串中使用正則表達式並查找字符串 '/^94404/'除非你有一些看起來很奇怪的郵政編碼,否則它們會找到任何東西。

在JavaScript中從字符串構建正則表達式對象的最簡單方法是使用new RegExp(...)

var query = { Zip: new RegExp('^' + zipCode) };

然后你可以:

collection.find(query).toArray(...)

這種東西在MongoDB shell中工作,類似的東西在Ruby接口中工作,所以它也應該在JavaScript接口中工作。

$options => i用於不區分大小寫的搜索

string開始

db.collection.find({zip:{'$regex' : '^string', '$options' : 'i'}})

string

db.collection.find({zip:{'$regex' : 'string$', '$options' : 'i'}})

包含string

db.collection.find({zip:{'$regex' : 'string', '$options' : 'i'}})

不包含string

db.collection.find({zip:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

將此作為書簽,以及您可能需要的任何其他更改的參考。 http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM