2017-02-14 6 views
0

Ich benutze Mongoose in MEAN Stack und Facing Problem beim Anwenden von Like-Abfrage. Ich habe viele Möglichkeiten über Internet-Hilfe versucht, aber nichts hat für mich funktioniert.Wie man eine Anfrage in Mongoose anwendet?

Es folgt das Modell für mein Schema:

var mongoose = require('mongoose'); 

var ItemTransactionSchema = new mongoose.Schema({ 
    tid : Number, 
    sku_id: Number, 
    num_iid: Number, 
    sub_order_tax_fee: String, 
    status:String, 
    price:Number, 
    invoice_no:String, 
    payment:Number, 
    cid:String, 
    adjust_fee:Number, 
    store_code:String, 
    discount_fee:Number, 
    total_fee:Number, 
    barcode:String, 
    itemdump:String, 
    end_time:Date, 
    storename:String, 
    logistics_company:String 
}); 

var item_transaction = mongoose.model('item_transaction', ItemTransactionSchema, 'item_transaction'); 

Hier ist der Code, den ich Abfrage anwenden bin mit:

var re = new RegExp(searched_key_word, 'i'); 

item_transaction.find({ "tid": { $regex: re }}, function (err, value) { 
if (err) { 
    callback(err, null); 
} 
else { 
    callback(null, value); 
} 
}).select('-_id').limit(parseInt(limit)); 

Bitte beachten Sie, dass meine Abfrage funktioniert gut und die Datensätze zurück, wenn ich nicht stimmen { "tid": { $regex: re } in Seiten find()

Hier ist die Ansicht von item_transaction Sammlung:

> db.item_transaction.find() 
{ "_id" : ObjectId("589dc1a3a46d1e96709db2c2"), "tid" : NumberLong("951107967214387"), "sku_id" : NumberLong("85864385869"), "num_iid" : NumberLong("45316210625"), "sub_order_tax_fee" : 
0, "status" : "TRADE_FINISHED", "price" : 195, "invoice_no" : "JL100296682", "payment" : 195, "cid" : 50011975, "adjust_fee" : 0, "store_code" : "", "discount_fee" : 0, "total_fee" : 1 
95, "barcode" : NumberLong("670983077667"), "itemdump" : "{\"consign_time\": \"2015-05-27 09:52:14\", \"sku_id\": \"85864385869\", \"refund_status\": \"NO_REFUND\", \"seller_type\": \"B 
\", \"sub_order_tax_fee\": \"0.00\", \"num\": 1, \"outer_sku_id\": \"670983077667\", \"shipping_type\": \"express\", \"is_daixiao\": false, \"logistics_company\": \"WnDirect\", \"sku_pr 
operties_name\": \"u989cu8272u5206u7c7b:u7c89u7ea2u8272;u9ad8u5ea6:31CM\", \"title\": \"u82f1u56fdu8fdbu53e3jellycatu5bb3u7f9eu7cfbu5217u7c89u8272u90c1u91d1u9999u90a6u5c3cu5154u8d85u67d 
4u8f6fu6bdbu7ed2u73a9u5177u516cu4ed4\", \"snapshot_url\": \"h:951107967214387_1\", \"sub_order_tax_rate\": \"0\", \"order_from\": \"TAOBAO\", \"status\": \"TRADE_FINISHED\", \"price\": 
\"195.00\", \"oid\": 951107967214387, \"buyer_rate\": false, \"invoice_no\": \"JL100296682\", \"payment\": \"195.00\", \"seller_rate\": false, \"cid\": 50011975, \"discount_fee\": \"0.0 
0\", \"adjust_fee\": \"0.00\", \"num_iid\": 45316210625, \"is_oversold\": false, \"end_time\": \"2015-06-16 09:52:34\", \"total_fee\": \"195.00\", \"pic_path\": \"http://img04.taobaocdn 
.com/bao/uploaded/i4/TB1yryuHVXXXXaRXVXXXXXXXXXX_!!0-item_pic.jpg\"}", "end_time" : "2015-06-16 09:52:34", "storename" : "TMALL", "logistics_company" : "WnDirect" } 
{ "_id" : ObjectId("589dc1a3a46d1e96709db2c3"), "tid" : NumberLong("967597019777082"), "sku_id" : NumberLong("91148011839"), "num_iid" : NumberLong("45361707245"), "sub_order_tax_fee" : 
0, "status" : "TRADE_FINISHED", "price" : 195, "invoice_no" : "JL100306378", "payment" : 195, "cid" : 50011975, "adjust_fee" : 0, "store_code" : "", "discount_fee" : 0, "total_fee" : 1 
95, "barcode" : NumberLong("670983073997"), "itemdump" : "{\"consign_time\": \"2015-06-24 09:57:50\", \"sku_id\": \"91148011839\", \"refund_status\": \"NO_REFUND\", \"seller_type\": \"B 
\", \"sub_order_tax_fee\": \"0.00\", \"num\": 1, \"outer_sku_id\": \"670983073997\", \"shipping_type\": \"express\", \"is_daixiao\": false, \"logistics_company\": \"WnDirect\", \"sku_pr 
operties_name\": \"u989cu8272u5206u7c7b:u94f6u8272;u9ad8u5ea6:u4e2du53f7 - u9ad831cm\", \"title\": \"u82f1u56fdu8fdbu53e3jellycatu7ecfu5178u5bb3u7f9eu7cfbu5217u5bb3u7f9eu90a6u5c3cu5154u 
94f6u8272u8d85u67d4u8f6fu6bdbu7ed2u73a9u5177u516cu4ed4\", \"snapshot_url\": \"h:967597019777082_1\", \"sub_order_tax_rate\": \"0\", \"order_from\": \"WAP,WAP\", \"status\": \"TRADE_FINI 
SHED\", \"price\": \"195.00\", \"oid\": 967597019777082, \"buyer_rate\": false, \"invoice_no\": \"JL100306378\", \"payment\": \"195.00\", \"seller_rate\": false, \"cid\": 50011975, \"di 
scount_fee\": \"0.00\", \"adjust_fee\": \"0.00\", \"num_iid\": 45361707245, \"is_oversold\": false, \"end_time\": \"2015-07-10 09:17:15\", \"total_fee\": \"195.00\", \"pic_path\": \"htt 
ps://img.alicdn.com/bao/uploaded/i3/TB1nPmtHVXXXXXfaXXXXXXXXXXX_!!0-item_pic.jpg\"}", "end_time" : "2015-07-10 09:17:15", "storename" : "TMALL", "logistics_company" : "WnDirect" } 
{ "_id" : ObjectId("589dc1a3a46d1e96709db2c4"), "tid" : NumberLong("1075205771411026"), "sku_id" : NumberLong("85662450758"), "num_iid" : NumberLong("45315502492"), "sub_order_tax_fee" 
: 0, "status" : "TRADE_FINISHED", "price" : 100, "invoice_no" : "JL100301165", "payment" : 100, "cid" : 50011975, "adjust_fee" : 0, "store_code" : "", "discount_fee" : 0, "total_fee" : 
100, "barcode" : NumberLong("670983062595"), "itemdump" : "{\"consign_time\": \"2015-06-04 10:15:09\", \"sku_id\": \"85662450758\", \"refund_status\": \"NO_REFUND\", \"seller_type\": \" 
B\", \"sub_order_tax_fee\": \"0.00\", \"num\": 1, \"outer_sku_id\": \"670983062595\", \"shipping_type\": \"express\", \"is_daixiao\": false, \"logistics_company\": \"WnDirect\", \"sku_p 
roperties_name\": \"u989cu8272u5206u7c7b:u7c73u8272;u9ad8u5ea6:13cm\", \"title\": \"u82f1u56fdu8fdbu53e3jellycatu7ecfu5178u5bb3u7f9eu7cfbu5217 u7ecfu5178u6b3eu90a6u5c3cu5154u7c73u8272u8 
+1

Mögliche Duplikat (http://stackoverflow.com/questions/3305561/how-to-query-mongodb-with-like) –

+1

http [Wie MongoDB mit "gefällt mir" fragen?]: // stackoverflow.com/questions/30722650/mongoose-find-regexp-for-number-type-field – Vishnu

+0

@ Naeem Shaikh Ich habe versucht, die Lösungen auf http://StackOverflow.com/Questions/3305561/How-to-Query-Mongodb -with-like –

Antwort

1

ich es wie folgt verwendet, um die Zahl ‚Pfad/Spalte‘ auf String auf der Laufzeit zu konvertieren.

item_transaction.find({ "$where": "function() { return this.tid.toString().match(/"+searched_key_word+"/) != null; }" }, function (err, value) { 
    if (err) { 
     callback(err, null); 
    } 
    else { 
     callback(null, value); 
    } 
}).select('-_id').limit(parseInt(limit)); 
1

so fair, wie ich befürchte, Sie können nur reguläre Ausdrücke in Strings ausführen. Also, haben Sie zwei Möglichkeiten:

Option 1 - Verwandeln Sie Ihre TID-Feld in einem String, dann können Sie Befehle ausführen, wie folgt aus:

db.item_transaction.find({tid: { $regex : /"yourRegex"/ }}) 

Dies wird die Arbeit machen. Der einzige Nachteil, den Sie haben werden, besteht darin, Ihre Tids in einen String zu konvertieren (von dem ich annehme, dass er Sie nicht viel stören wird, da Sie immer noch modellieren).

Option 2 - Suche mit $ gt und $ lt. Wenn das, was Sie wollen, wirklich eine Zahl ist, können Sie die Operatoren $ gt (größer als) und $ lt (kleiner als) verwenden, um Zahlen in einem Bereich abzurufen. Ich würde es nicht empfehlen, es zu tun, da es kein regelmäßiger Ausdruck ist, aber ich sage es nur um des Wissens willen. Sie können es wie folgt verwenden:

db.item_transaction.find({ tid: {$gt : 100} }) 

hoffen, meine Antwort war hilfreich

Verwandte Themen