mongoose查询子文档属性

我试图通过一个WEB API公开这个function。 在这个代码中设置的方式是,有人在URL上提供一个GET,并提供查询string,forms为:

?field=value&anotherfield.subproperty=value

但我似乎无法查询基于子文档属性的工作。 下面你会发现我的准系统代码,logging我试图接受和我的两个testing用例。

码:

 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); } } }); }); 

logging:

 { "_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返回这个模型。

不成功的查询(没有find匹配查询的文件):

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

返回没有模型,并返回404。

你没有正确使用点符号,因为你正在寻找的属性是在一个数组中:

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

查询数组内容通常需要您针对数组(对于DocumentDB查询)进行连接,而不是简单的find()

如果你想在这里使用点符号的能力,你需要创build一个子文档,如:

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

此时,您可以解决诸如telecom.systemtelecom.valuetelecom.use.等属性telecom.use.