2017-01-25 2 views
1

Я пытаюсь разоблачить эту функциональность через WEB API. Как это установлено в этом коде является то, что кто-то делает GET по URL предоставления строки запроса вместе с ним в виде:Mongoose Querying Sub-Document Properties

?field=value&anotherfield.subproperty=value

Но я не могу показаться, чтобы получить запрашивая на основе суб- свойства документа для работы. Ниже вы найдете мой код barebones, запись, которую я пытаюсь получить, и оба моих тестовых примера.

Код:

var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var config = require('../config'); 
var User = require('../models/user'); 
var functions = require('../functions'); 

router.get('/', function(req,res,next) { 
    //Check Permissions associated with UID *TODO 
    var parameters = req.query; 
    console.log(parameters); 
    User.find(parameters, function(err, users) { 
     if (err) 
     { 
      json = functions.generateOperationOutcome("exception","error",err,"exception"); 
      res.status(500); 
      res.json(json); 
     } 
     else 
     { 
      //Check for blank result 
      if (users.length === 0) 
      { 
       json = functions.generateOperationOutcome("not-found","warning","Non-Existent Resource","warning"); 
       res.status(404); 
       res.json(json); 
      } 
      else { 
       res.status(200); 
       res.json(users); 
      } 
     } 
    }); 
}); 

Запись:

{ 
    "_id": "5871d2e814946a941d8611fb", 
    "resourceType": "testResource", 
    "link": [], 
    "communication": [], 
    "animal": { 
     "genderStatus": { 
     "coding": [] 
     }, 
     "breed": { 
     "coding": [] 
     }, 
     "species": { 
     "coding": [] 
     } 
    }, 
    "contact": [], 
    "photo": [], 
    "maritalStatus": { 
     "coding": [] 
    }, 
    "address": [], 
    "gender": "unknown", 
    "telecom": [ 
     { 
     "system": "phone", 
     "value": "2019196553", 
     "use": "home" 
     } 
    ], 
    "name": { 
     "suffix": [], 
     "prefix": [], 
     "given": [], 
     "family": [] 
    }, 
    "identifier": [ 
     { 
     "use": "official", 
     "type": { 
      "coding": { 
      "system": "kylec laptop", 
      "version": "0.01", 
      "code": "UDI", 
      "display": "Universal Device Identifier", 
      "userSelected": false 
      }, 
      "text": "test" 
     }, 
     "system": "test system", 
     "value": "test value", 
     "assigner": { 
      "reference": "test assigner reference" 
     }, 
     "period": { 
      "start": "1992-12-31T09:59:59+00:00" 
     } 
     } 
    ] 
} 

Успешный запрос:

GET http://{{LOCAL}}/api/user?resourceType=testResource 

Возвращает эту модель одна из MongoDB.

Неудачный запрос (документы, соответствующие запросу не найдено):

GET http://{{LOCAL}}/api/user?telecom.system=phone 

не возвращает модели назад и результаты в 404.

ответ

1

Вы не правильно, используя точечную нотацию, как свойство вы поиск в пределах массива:

"telecom": [ 
    { 
    "system": "phone", 
    "value": "2019196553", 
    "use": "home" 
    } 
] 

Запрос содержимого массива обычно потребует, чтобы Вы сделали присоединиться к массиву (для запросов DocumentDB), а не просто find().

Если вы хотите возможность использовать точечную нотацию здесь, вам нужно создать поддокумент, как:

"telecom": { 
    "system": "phone", 
    "value": "2019196553", 
    "use": "home" 
    } 

На данный момент, вы были бы в состоянии решать такие свойства, как telecom.system, telecom.value, и telecom.use.

+0

Благодарим вас за ответ. Можете ли вы подробнее рассказать о том, как мы можем использовать запросы против массива, как у нас? В настоящее время мы используем DocumentDB с поддержкой MongoDB, поэтому мы надеемся, что для этого можно использовать способ мангуста/MongoDB. – Kyle

+0

В чистом MongoDB вы делаете это как [это] (https://docs.mongodb.com/manual/tutorial/query-documents/#match-a-field-without-specifying-array-index) –

Смежные вопросы