2017-01-25 5 views
1

私はこの機能をWEB APIを通じて公開しようとしています。Mongooseサブ文書のプロパティを照会

?field=value&anotherfield.subproperty=value

しかし、私はサブをもとに問い合わせるように見えることはできません:それは、このコードに設定されている方法は、誰かがの形でそれと一緒にクエリ文字列を提供するURLにGETしないことです作業するドキュメントプロパティ。私のベアボーンコード、私が受け取ろうとしているレコード、そして私のテストケースの両方が見つかります。

コード:

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から、この一つのモデル。

失敗したクエリ(クエリに一致する文書が見つかりません):404

答えて

1

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

戻り値なしモデルバックと結果あなたが適切にドット表記を使用していないが、プロパティとしてあなたがしています求めているが、アレイ内にある:通常、アレイの内容を照会

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

は、単純な(DocumentDBクエリ用)の配列に対して参加を行うためにあなたを必要としないだろう。

あなたはここにドット表記を使用する能力を望んでいた場合、あなたは同様に、サブドキュメントを作成する必要があるだろう:あなたは、このようなtelecom.system等の特性に対処することができるだろう、この時点で

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

telecom.valueおよびtelecom.use.

+0

ありがとうございました。私たちが持っているような配列に対してクエリをどのように利用できるかについてもっと詳しく説明できますか?私たちは現在、MongoDBのサポートでDocumentDBを利用していますので、これを達成するためのmongoose/MongoDBの方法が必要です。 – Kyle

+0

純粋なMongoDBでは、[this](https://docs.mongodb.com/manual/tutorial/query-documents/#match-a-field-without-specifying-array-index)のようにこれを行います。 –

関連する問題