私はMongodbと私のデータベーススキーマから次のように使用します:
firstName: 'vahid',
lastName: 'kh',
age: 12
名 + 姓が「vahid kh」が好きなすべてのレコードを検索したい。SQL では、これは次のようになります。
select * from table where firstName + lastName like '%vahid kh%'
私はMongodbと私のデータベーススキーマから次のように使用します:
firstName: 'vahid',
lastName: 'kh',
age: 12
名 + 姓が「vahid kh」が好きなすべてのレコードを検索したい。SQL では、これは次のようになります。
select * from table where firstName + lastName like '%vahid kh%'
これは、今日リリースされた 2.4 でのみ使用できるようです。
> db.temp.save({ "firstName" : "Bob", "lastName" : "Smith", Age : 12 });
> db.temp.find();
{ "_id" : ObjectId("5148a2a00477cddcdece1b34"), "firstName" : "Bob", "lastName" : "Smith", "Age" : 12 }
> db.temp.aggregate({ $project : { "name" : { $concat : [ "$firstName", " ", "$lastName" ] } } });
{
"result" : [
{
"_id" : ObjectId("5148a2a00477cddcdece1b34"),
"name" : "Bob Smith"
}
],
"ok" : 1
}
を使用できます$regex
。このようにして、部分一致を使用できます。そんな感じ:
db.collection.find( { field: /acme.*corp/i } )
これは、phpでの回答と似たような質問です:MongoRegexとコレクション内の複数の行を検索します
mongoregexに関するドキュメントはこちらです:http://docs.mongodb.org/manual/reference/operator/regex/
編集:
SQLのクエリであなたのコメントを読んだだけです。簡単な解決策は、フィールドを作成fullname
してそれを検索する$regex
ことです。これは一種のデータベース非正規化であり、多少冗長なデータを格納します。
またはさらに簡単に、これも仕事をするはずです:
db.collection.find( { firstName: /*vahid/i, lastName: /kh*/i } )
I have code in expressjs code aggregate is bit slow then find so I have use conditional based and use regular express to find true results, I am sharing with you nodejs code I hope it useful for you or my other code lover friends.
router.get('/publisher/:q',function(req,res){
var q = ucfirst( req.params['q'] );
var qSplit = q.split(" ");
var db = mongojs(CONNECTION_STRING, ['tags_helper','users']);
var query = { "status" : 1, isAdmin : { $exists : false } };
console.log(qSplit);
if( qSplit.length > 1 )
{
query["firstName"] = new RegExp(qSplit[0],"i");
query["lastName"] = new RegExp(qSplit[1],"i");
}
else
{
qSplit[0] = new RegExp(qSplit[0],"i");
qSplit[1] = new RegExp(qSplit[0],"i");
//query.push( { $or : [ {"firstName": new RegExp(q,"i")},{"lastName": new RegExp(q,"i")} ] } );
query["$or"] = [ {"firstName": new RegExp(q,"i")},{"lastName": new RegExp(q,"i")} ];
}
db.users.find( query,{_id : 1,firstName:1,lastName:1,image:1,profileName:1}).limit(10,function (err, users) {
//TODO your further code ..
});
});
Have a happy coding day.