1

私はMongodbと私のデータベーススキーマから次のように使用します:

firstName: 'vahid',
lastName: 'kh',
age: 12 

名 + 姓が「vahid kh」が好きなすべてのレコードを検索したい。SQL では、これは次のようになります。

select * from table where firstName + lastName like '%vahid kh%'

4

4 に答える 4

3

これは、今日リリースされた 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
} 
于 2013-03-19T17:43:30.410 に答える
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 } )
于 2013-03-19T17:48:43.543 に答える
0

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.

于 2016-04-04T06:32:44.360 に答える