2017-02-14 2 views
0

У меня возникли проблемы с поиском объекта в моей базе данных CosmicMind/Graph. Вот код, который довольно толковыйCosmicMind/Graph - Запрос поиска с 3 параметрами не возвращает ожидаемый объект

//User 1 
//data: 14 Febbraio 2017 
//ora : 15:40 
//name: Paolo 

//User 2 
//data: 14 Febbraio 2017 
//ora : 12:40 
//name: Ernesto 

//User 3 
//data: 13 Febbraio 2017 
//ora : 16:40 
//name: Paolo 

/*Search Parameters*/ 
//dataSearch = 13 Febbraio 2017 
//oraSearch = 16:40 
//nameSearch = Paolo 

var search = Search<Entity>(graph: graph).for(types: "Users").where(properties: (key: "data", value: dataSearch)).where(properties: (key:"ora", value: oraSearch)).where(properties: (key:"name", value: nameSearch)) 
    //returns [User1, User3] 

Я ожидал от поиска [USER3], поскольку параметры поиска совпадают с этим объектом, но вместо этого, поиск возвращается [User1, User3], как если Параметры dataSearch и oraSearch игнорируются, и для поиска используется только последний параметр поиска nameSearch. Что я делаю неправильно?

+0

Что такое «Поиск»? это оболочка данных ядра, которую вы используете? –

+0

точно, как вы можете проверить из тегов, график от cosmicmind - это обертка – Simone

ответ

0

У вас слишком много where statements. Они заменяют себя каждым последующим заявлением.

это:

.where(properties: (key: "data", value: dataSearch)).where(properties: (key:"ora", value: oraSearch)).where(properties: (key:"name", value: nameSearch) 

должно быть:

.where(properties: (key: "data", value: dataSearch), (key:"ora", value: oraSearch), (key:"name", value: nameSearch)) 

или сокращенном:

.where(properties: ("data", dataSearch), ("ora", oraSearch), ("name", nameSearch)) 

Вот это :)

+0

Спасибо за ответ, но он всегда возвращает всех пользователей, у которых есть данные, равные dataSearch, игнорируя параметры ora и имени – Simone

+0

Можете ли вы запустить тесты Graph и все работает хорошо? И какую версию вы используете? – CosmicMind

+0

Я использую исходные файлы из ведущей ветки github – Simone

0

EDIT: я "решить" с помощью другого параметра для извлечения записей, String тип. Он отлично работал как searchParameter, а не типа Date. Затем я сделал некоторую операцию над данными, чтобы изолировать правильный результат.

Может быть, моя Xcode консоль может помочь вам, но сначала я покажу вам мой код:

let search = Search<Entity>(graph: DataManager.shared.graph).for(types: DataManager.shared.entityType).where(properties: (key: "data", value: (DataManager.shared.datasource[0][0]["data"] as! Date))) 
print("The date i am searching for->",DataManager.shared.datasource[0][0]["data"]!) 
for (index,res) in search.sync().enumerated(){ 
    print("Result #\(index)->\(res["data"]!)") 
} 
print("Total results found->",search.sync().count) 
print("But only 10 records meet the requirement, not 22") 

The date i am searching for-> 2017-02-16 11:19:14 +0000 
Result #0->2017-02-15 22:31:28 +0000 
Result #1->2017-02-15 22:21:51 +0000 
Result #2->2017-02-15 22:31:43 +0000 
Result #3->2017-02-15 22:44:31 +0000 
Result #4->2017-02-16 10:56:37 +0000 
Result #5->2017-02-16 10:56:48 +0000 
Result #6->2017-02-16 10:59:23 +0000 
Result #7->2017-02-15 22:32:01 +0000 
Result #8->2017-02-16 10:56:21 +0000 
Result #9->2017-02-15 22:23:06 +0000 
Result #10->2017-02-16 11:16:00 +0000 
Result #11->2017-02-16 11:19:14 +0000 
Result #12->2017-02-15 22:32:12 +0000 
Result #13->2017-02-15 22:42:12 +0000 
Result #14->2017-02-16 11:18:07 +0000 
Result #15->2017-02-16 10:59:59 +0000 
Result #16->2017-02-15 22:31:36 +0000 
Result #17->2017-02-16 10:58:24 +0000 
Result #18->2017-02-16 10:59:07 +0000 
Result #19->2017-02-15 22:23:22 +0000 
Result #20->2017-02-15 22:31:49 +0000 
Result #21->2017-02-15 22:32:18 +0000 
Total results found-> 22 
But only 10 records meet the requirement, not 22 
Смежные вопросы