Mongoose 查询子文档属性
Mongoose Querying Sub-Document Properties
我正在尝试通过 WEB API 公开此功能。它在这段代码中的设置方式是有人在 URL 上执行 GET,并以以下形式提供查询字符串:
?field=value&anotherfield.subproperty=value
但我似乎无法根据子文档属性进行查询。您将在下面找到我的准系统代码、我尝试接收的记录以及我的两个测试用例。
代码:
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
Returns 这一款来自 MongoDB.
查询失败(未找到匹配查询的文档):
GET http://{{LOCAL}}/api/user?telecom.system=phone
Returns 没有返回模型并导致 404。
您没有正确使用 dot-notation,因为您要查找的 属性 在一个数组中:
"telecom": [
{
"system": "phone",
"value": "2019196553",
"use": "home"
}
]
查询数组内容通常需要您对数组进行连接(对于 DocumentDB 查询),而不是简单的 find()
.
如果您想在这里使用 dot-notation,您需要创建一个子文档,例如:
"telecom": {
"system": "phone",
"value": "2019196553",
"use": "home"
}
此时,您将能够处理 telecom.system
、telecom.value
和 telecom.use.
等属性
我正在尝试通过 WEB API 公开此功能。它在这段代码中的设置方式是有人在 URL 上执行 GET,并以以下形式提供查询字符串:
?field=value&anotherfield.subproperty=value
但我似乎无法根据子文档属性进行查询。您将在下面找到我的准系统代码、我尝试接收的记录以及我的两个测试用例。
代码:
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
Returns 这一款来自 MongoDB.
查询失败(未找到匹配查询的文档):
GET http://{{LOCAL}}/api/user?telecom.system=phone
Returns 没有返回模型并导致 404。
您没有正确使用 dot-notation,因为您要查找的 属性 在一个数组中:
"telecom": [
{
"system": "phone",
"value": "2019196553",
"use": "home"
}
]
查询数组内容通常需要您对数组进行连接(对于 DocumentDB 查询),而不是简单的 find()
.
如果您想在这里使用 dot-notation,您需要创建一个子文档,例如:
"telecom": {
"system": "phone",
"value": "2019196553",
"use": "home"
}
此时,您将能够处理 telecom.system
、telecom.value
和 telecom.use.