4

私はMongoDBが初めてです。

Spring データと mongodb を使用してアプリケーションをプログラミングしています。2 つのフィールドを持つ 1 つのクラスがあります:firstnamelastname.

firstname完全な名前 ( + )に 1 つの文字列を含むドキュメントに対して 1 つのクエリが必要lastnameです。

例: firstname = "Hansen David"lastname = "Gonzalez Sastoque"検索するクエリがありますDavid Gonzalez。この例では、一致することが予想されます。

2 つの文字列を連結すると解決しますが、これを実行する方法がわかりません。

4

3 に答える 3

5

ドキュメントに新しい配列フィールドを作成し (それを と呼びますnames)、その配列に各名前をスペースで区切って入れます。あなたの例では、配列の内容は次のとおりです。

  1. ハンセン
  2. デビッド
  3. ゴンザレス
  4. サストク

(大文字と小文字を区別しない問題を防ぐために、すべて小文字にしてください)

クエリを実行する前に、入力を小文字に変換し、同様にスペースで分割します。

これで、$all 演算子を使用して目的を達成できます

db.persons.find( { names: { $all: [ "david", "gonzalez" ] } } );
于 2012-09-18T09:30:46.997 に答える
2

$whereクエリで修飾子を使用できます。

db.users.findOne({$where: %JavaScript to match the document%})

あなたの場合、それはこのように見えるかもしれません:

db.users.findOne({$where: "this.firstname + ' ' + this.lastname == 'Gonzalez Sastoque'"})

またはこれ:

db.users.findOne({$where: "this.firstname.match(/Gonzalez/) && this.lastname.match(/Sastoque/)"})

私の最後の例は、まさにあなたが望むことをします。

更新:次のコードを試してください:

db.users.findOne({$where: "(this.firstname + ' ' + this.lastname).match('David Gonzalez'.replace(' ', '( .*)? '))"})
于 2012-09-23T15:15:11.277 に答える
0

フルネームをファーストネームとラストネームに分割してから、適切なMongoDBクエリセレクターを使用して、両方のフィールドでクエリを実行する必要があります。

于 2012-09-17T20:58:57.943 に答える