mongodb কিভাবে মংডোডিবি "লাইক" দিয়ে জিজ্ঞাসা করবেন?




mongodb-query sql-like (24)

আমি এসকিউএল এর like প্রশ্ন হিসাবে কিছু জিজ্ঞাসা করতে like :

select * 
from users 
where name like '%m%'

মংডোডবিতে একই কাজ করবেন কিভাবে?
আমি documentations like একটি অপারেটর খুঁজে পাচ্ছি না।


db.users.insert({name: 'paulo'})
db.users.insert({name: 'patric'})
db.users.insert({name: 'pedro'})

db.users.find({name: /a/})  //like '%a%'

আউট: পাওলো, প্যাট্রিক

db.users.find({name: /^pa/}) //like 'pa%' 

আউট: পাওলো, প্যাট্রিক

db.users.find({name: /ro$/}) //like '%ro'

আউট: Pedro


লাইক মত নীচের দেখানো হবে

db.movies.find({title: /.*Twelve Monkeys.*/}).sort({regularizedCorRelation : 1}).limit(10);

স্কাল ReactiveMongo api জন্য,

val query = BSONDocument("title" -> BSONRegex(".*"+name+".*", "")) //like
val sortQ = BSONDocument("regularizedCorRelation" -> BSONInteger(1))
val cursor = collection.find(query).sort(sortQ).options(QueryOpts().batchSize(10)).cursor[BSONDocument]

আপনি 2.6 mongodb এর নতুন বৈশিষ্ট্যটি ব্যবহার করতে পারেন:

db.foo.insert({desc: "This is a string with text"});
db.foo.insert({desc:"This is a another string with Text"});
db.foo.ensureIndex({"desc":"text"});
db.foo.find({
    $text:{
        $search:"text"
    }
});

MongoRegex অব্যবহৃত হয়েছে।
MongoDB \ BSON \ Regex ব্যবহার করুন

$regex = new MongoDB\BSON\Regex ( '^m');
$cursor = $collection->find(array('users' => $regex));
//iterate through the cursor

Node.js মধ্যে Mongoose জন্য

db.users.find({'name': {'$regex': '.*sometext.*'}})

MongoDB কম্পাসের সাহায্যে আপনাকে কঠোর মোড সিনট্যাক্স ব্যবহার করতে হবে:

{ "text": { "$regex": "^Foo.*", "$options": "i" } }

(মংডোডিবি কম্পাসে, এটির পরিবর্তে আপনি " পরিবর্তে " ব্যবহার করেন)


পিএইচপি জন্য Mongo মত।
আমি মত php mongo সঙ্গে বিভিন্ন সমস্যা ছিল। আমি দেখেছি যে রেজেক্স প্যারামসগুলি কিছু পরিস্থিতিতে সহায়তা করে পিএইচপি মোনো ক্ষেত্রটি শুরু করে । আমি আরো জনপ্রিয় থ্রেড অবদান এখানে পোস্ট হবে figured

যেমন

db()->users->insert(['name' => 'john']);
db()->users->insert(['name' => 'joe']);
db()->users->insert(['name' => 'jason']);

// starts with
$like_var = 'jo';
$prefix = '/^';
$suffix = '/';
$name = $prefix . $like_var . $suffix;
db()->users->find(['name' => array('$regex'=>new MongoRegex($name))]);
output: (joe, john)

// contains
$like_var = 'j';
$prefix = '/';
$suffix = '/';
$name = $prefix . $like_var . $suffix;
db()->users->find(['name' => array('$regex'=>new MongoRegex($name))]);

output: (joe, john, jason)

মনে হচ্ছে জাভাস্ক্রিপ্ট /regex_pattern/ pattern এবং mongo {'$regex': 'regex_pattern'} প্যাটার্ন উভয় ব্যবহার করার কারণ রয়েছে। দেখুন: MongoBD RegEx সিনট্যাক্স বিধিনিষেধ

এটি একটি সম্পূর্ণ রেজেক্ট টিউটোরিয়াল নয়, তবে আমি উপরে একটি অত্যন্ত ভোট দেওয়া দ্বিধান্বিত পোস্ট দেখে পরে এই পরীক্ষা চালানোর জন্য অনুপ্রাণিত হয়েছিলাম।

> ['abbbb','bbabb','bbbba'].forEach(function(v){db.test_collection.insert({val: v})})

> db.test_collection.find({val: /a/})
{ "val" : "abbbb" }
{ "val" : "bbabb" }
{ "val" : "bbbba" }

> db.test_collection.find({val: /.*a.*/})
{ "val" : "abbbb" }
{ "val" : "bbabb" }
{ "val" : "bbbba" }

> db.test_collection.find({val: /.+a.+/})
{ "val" : "bbabb" }

> db.test_collection.find({val: /^a/})
{ "val" : "abbbb" }

> db.test_collection.find({val: /a$/})
{ "val" : "bbbba" }

> db.test_collection.find({val: {'$regex': 'a$'}})
{ "val" : "bbbba" }

ইতিমধ্যে আপনি উত্তর পেয়েছিলাম কিন্তু কেস অসংবেদকতা সঙ্গে regex মেলে

আপনি নিম্নলিখিত প্রশ্নের ব্যবহার করতে পারে

db.users.find ({ "name" : /m/i } ).pretty()

i /m/i ক্ষেত্রে সংবেদনশীলতা এবং .pretty() একটি আরো সুন্দর আউটপুট প্রদান করে


যে হতে হবে:

db.users.find({"name": /.*m.*/})

অথবা সাদৃশ্যপূর্ণ:

db.users.find({"name": /m/})

আপনি এমন কিছু খুঁজছেন যা "এম" কোথাও রয়েছে (SQL এর ' % ' অপারেটরটি Regexp এর ' .* ' এর সমতুল্য), এমন কিছু না যা "স্ট্রিংয়ের শুরুতে" এম।


আপনি পিএইচপি ব্যবহার করছেন, আপনি নীচের মত MongoDB_DataObject wrapper ব্যবহার করতে পারেন:

$model = new MongoDB_DataObject();

$model->query("select * from users where name like '%m%'");

while($model->fetch()) {
    var_dump($model);
}

বা:

$model = new MongoDB_DataObject('users);

$model->whereAdd("name like '%m%'");

$model->find();

while($model->fetch()) {
    var_dump($model);
}

একত্রীকরণ সাবস্ট্রিং অনুসন্ধান ব্যবহার করুন (সূচক সঙ্গে !!!):

db.collection.aggregate([{
        $project : {
            fieldExists : {
                $indexOfBytes : ['$field', 'string']
            }
        }
    }, {
        $match : {
            fieldExists : {
                $gt : -1
            }
        }
    }, {
        $limit : 5
    }
]);

আপনি কোন JS স্ক্রিপ্ট নির্মাণ করতে যেখানে বিবৃতি ব্যবহার করতে পারেন:

db.myCollection.find( { $where: "this.name.toLowerCase().indexOf('m') >= 0" } );

রেফারেন্স: http://docs.mongodb.org/manual/reference/operator/where/


নোডেজ প্রকল্পে এবং mongoose ব্যবহার ব্যবহার করে অনুসন্ধানের মত

var User = mongoose.model('User');

var searchQuery={};
searchQuery.email = req.query.email;
searchQuery.name = {$regex: req.query.name, $options: 'i'};
User.find(searchQuery, function(error, user) {
                if(error || user === null) {
                    return res.status(500).send(error);
                }
                return res.status(200).send(user);
            });

আপনি যদি মোগোতে 'লাইক' অনুসন্ধান চান তবে এই প্রশ্নটি ব্যবহার করে আপনি $ regex দিয়ে যান

db.product.find({name:{$regex:/m/i}})

আরো জন্য আপনি পাশাপাশি ডকুমেন্টেশন পড়তে পারেন। https://docs.mongodb.com/manual/reference/operator/query/regex/


স্প্রিং-ডেটা মংডব ব্যবহার করলে আপনি এভাবে এটি করতে পারেন:

String tagName = "m";
Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));

ইতিমধ্যে অনেক উত্তর আছে। আমি regex সঙ্গে স্ট্রিং অনুসন্ধানের জন্য বিভিন্ন ধরণের প্রয়োজনীয়তা এবং সমাধান দিচ্ছি।

আপনি Regex সঙ্গে শব্দ করতে পারেন যা শব্দ ধারণ করতে পারেন। এছাড়াও আপনি অসংবেদী অনুসন্ধান ক্ষেত্রে $options => i ব্যবহার করতে পারেন

string রয়েছে

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

শুধুমাত্র Regex সঙ্গে string না

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

সঠিক ক্ষেত্রে অসংবেদী string

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

string দিয়ে শুরু করুন

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

string সঙ্গে শেষ

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

এটি একটি বুকমার্ক হিসাবে রাখুন এবং আপনার যে কোনও অন্যান্য পরিবর্তনের জন্য একটি রেফারেন্স।


Regex ব্যয়বহুল প্রক্রিয়া।

আরেকটি উপায় হচ্ছে পাঠ্যের সূচী তৈরি করা এবং তারপর অনুসন্ধানের মাধ্যমে এটি $search

একটি পাঠ্য তৈরি করুন যা আপনি সন্ধান করতে চান এমন ক্ষেত্রগুলির সূচী:

db.collection.createIndex({name: 'text', otherField: 'text'});

টেক্সট সূচী একটি স্ট্রিং জন্য অনুসন্ধান করুন:

db.collection.find({
  '$text'=>{'$search': "The string"}
})

যান এবং mgo ড্রাইভার মধ্যে:

Collection.Find(bson.M{"name": bson.RegEx{"m", ""}}).All(&result)

যেখানে ফলাফল চাওয়া পরের গঠন উদাহরণ


মধ্যে

  • Python ব্যবহার Pymongo
  • Node.js ব্যবহার করে Mongoose
  • Jongo , জাভা ব্যবহার করে
  • এমগো , গো ব্যবহার করে

আপনি করতে পারেন:

db.users.find({'name': {'$regex': 'sometext'}})

নীচের হিসাবে মিলে নিয়মিত এক্সপ্রেশন ব্যবহার করুন। 'আমি' ক্ষেত্রে অসংবেদকতা দেখায়।

var collections = mongoDatabase.GetCollection("Abcd");

var queryA = Query.And(
         Query.Matches("strName", new BsonRegularExpression("ABCD", "i")), 
         Query.Matches("strVal", new BsonRegularExpression("4121", "i")));

var queryB = Query.Or(
       Query.Matches("strName", new BsonRegularExpression("ABCD","i")),
       Query.Matches("strVal", new BsonRegularExpression("33156", "i")));

var getA = collections.Find(queryA);
var getB = collections.Find(queryB);

Node.js ব্যবহার করে, it বলে যে আপনি এটি লিখতে পারেন:

db.collection.find( { field: /acme.*corp/i } );
//or
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );

Also , আপনি এটি লিখতে পারেন:

db.collection.find( { field: new RegExp('acme.*corp', 'i') } );

আপনি mongo যে জন্য regex ব্যবহার করবে।

উদাহরণস্বরূপ: db.users.find({"name": /^m/})


আপনার 2 টি পছন্দ আছে:

db.users.find({"name": /string/})

অথবা

db.users.find({"name": {"$regex": "string", "$options": "i"}})

দ্বিতীয়টিতে আপনার আরো বিকল্প আছে, যেমন "i" বিকল্পগুলি অস্বস্তিকর ব্যবহার করে খুঁজে পেতে। এবং "স্ট্রিং" সম্পর্কে আপনি " স্ট্রিং। " (% স্ট্রিং%), অথবা "স্ট্রিং। *" (স্ট্রিং%) এবং "। * স্ট্রিং) (% স্ট্রিং) ব্যবহার করতে পারেন। উদাহরণস্বরূপ আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারেন আপনি যেমন চান.

উপভোগ করুন!





sql-like