2013-08-15 3 views
0

Моей коллекции выглядит следующим образом:как запросить по значениям в MongoDB

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

Теперь я хочу, чтобы получить клиент, который смартфон = 18630283895, как я могу это сделать?

Большое спасибо.

+0

Этого типа вопроса был покрыт много много раз, пожалуйста, сделайте несколько поисков Google, прежде чем размещать здесь: '$ db-> collection-> find (array ('$ or' => array (array ('CONTACT.PHONE.WORK' => 18630283895), массив ('CONTACT.PHONE.HOME' => 18630283895)))) 'этот один раз – Sammaye

+0

Привет @Sammaye, извините, вопрос не слишком ясен, номер телефона имеет много типов, я хочу найти значение = 18630283895, независимо от того, какой тип это работа или дом или какой-то другой. – Winmain

+0

Здесь вы выбрали неправильную схему, вам нужен массив пар, например: 'PHONE: [{name: 'home', number: 186707076}, {name: 'work', number: 59569696}]' That вы можете просто запросить на 'PHONE.number', и он выберет все – Sammaye

ответ

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" }); 
Смежные вопросы