2016-04-13 52 views

回答

0

,如果你有這樣的數據:

{ "_id" : ObjectId("..."), "name" : "nameA", "serial" : 1200 } 
{ "_id" : ObjectId("..."), "name" : "nameB", "serial" : 1234 } 
{ "_id" : ObjectId("..."), "name" : "nameC", "serial" : 4200 } 

,你想用正則表達式現場serial查詢,你可以做聚合:

db.coll.aggregate(
    {$project: {name: true, serial: {$toLower: '$serial'}}}, 
    {$match: {serial: /20/}}) 
) 
// { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" } 
// { "_id" : ObjectId("..."), "name" : "nameC", "serial" : "4200" } 

db.coll.aggregate(
    {$project: {name: true, serial: {$toLower: '$serial'}}}, 
    {$match: {serial: /12/}}) 
) 
// { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" } 
// { "_id" : ObjectId("..."), "name" : "nameB", "serial" : "1234" } 

但是這是一個黑客,我不會在我的工作中使用這種方法。也許有一種方法來重新組織你的數據結構?

而且你必須知道你不能在這個查詢中使用任何索引,mongo會做全表掃描。

希望我正確理解你的問題;)。

+0

它沒有給我一個更好的解決方案.An例如如下> db.Legacy_details.findOne()--------收集 { 「_id」:物件( 「573d8f​​5eeb55cc97e9c07aa5」), 「陣「:290103590, 」設備「: 」10000000c987856d「, 」主機「: 」「 } > db.Legacy_details.find({」 陣列 「:」 290103590 「}) > db.Legacy_details.find({」 Array「:/ 290103590 /}) > – MRz

+0

對不起,但我不明白你的問題。如果你想用字符串的一部分查找然後使用正則表達式,我知道你知道它。如果你需要分解,那就像我一樣使用'$或'。 – evilive

+0

嗯,我想我知道了,如果不是,請糾正我。你有一個int字段,你需要與它部分匹配?好的,我可以建議你使用聚合函數。首先,您應該將int值轉換爲字符串,然後將其與您的查詢進行匹配。要將ints轉換爲字符串,只需使用修飾符'$ toLower'。 – evilive