0

私のコレクションは次のようになります。

{
"_id" : ObjectId("520c8976586f12c80900301d"),
"IDENTITY" : "ae4ff1546ecfe6ce6e8ebb2d870d57fb",
"NAME" : "Winmain Yao",
"TYPE" : "COMPANY",
"PUBLIC" : 1,
"BACKGROUND" : null,
"CONTACT" : {
  "PHONE" : {
    "WORK" : "18630283895",
    "HOME" : "188837283"
},
"EMAIL" : {
  "DEFAULT00001" : "zxwinmain@gmail.com"
},
"IM" : [],
"SITE" : [],
"ADDRESS" : [],
"SOCIAL" : []
},
"RELATION" : {
  "ACCOUNT" : "16713a29767fa4e8f139dfb249900c07",
  "USER" : "84a9e7a8e5f3a13d411cfa8ff4a62a50"
},
"CREATED" : 1376553334,
"UPDATED" : 0,
"DELETED" : 0
}

電話番号 = 18630283895 の顧客を取得したいのですが、どうすればよいですか?

どうもありがとう。

4

1 に答える 1

0

以下:

"PHONE" : {
    "WORK" : "18630283895",
    "HOME" : "188837283"
},

間違ったアプローチです。常に別のタイプの電話番号があるため、「実際には値であるキー」になってしまいました。これにより、クエリ (およびインデックス) が難しくなります。これに対するより良いアプローチは次のとおりです。

"PHONE" : [
    { type: "WORK", number: "18630283895" },
    { type: "HOME", number: "188837283" },
],

次に、次の方法で非常に簡単にインデックスを作成できます。

db.collection.ensureIndex( { "PHONE.number": 1 } );

そして、次のように数値をクエリします。

db.collection.find( { "PHONE.number" : "18630283895" } );
于 2013-08-15T08:43:01.503 に答える