mongodb - 在 MongoDB 中查询嵌套数组
问题描述
需要帮助格式化查询以使用嵌套数组的搜索参数查找/获取值。
我有一个集合如下
[
{
"_id": "5b3ad55f66479332a0482961",
"timestamp": "2018-06-17T00:30:00.000Z",
"deviceid": "123456",
"values": [
{
"minval": 1,
"minvalues": [
{
"secval": 51,
"secvalues": {
"alt": "300",
"mcc": "404",
"mnc": "46",
"priority": 1
}
},
{
"secval": 52,
"secvalues": {
"alt": "300",
"mcc": "404",
"mnc": "46",
"priority": 1
}
},
{
"secval": 56,
"secvalues": {
"alt": "300",
"mcc": "404",
"mnc": "46",
"priority": 0
}
}
]
}
]
}
]
需要如下输出,搜索属性为“values.minvalues.secvalues.priority”
[
{
"_id": "5b3ad55f66479332a0482961",
"timestamp": "2018-06-17T00:30:00.000Z",
"deviceid": "123456",
"values": [
{
"minval": 1,
"minvalues": [
{
"secval": 56,
"secvalues": {
"alt": "300",
"mcc": "404",
"mnc": "46",
"priority": 0
}
}
]
}
]
}
]
我尝试了以下查询但没有成功
dbRetval.db('ls_gpsdatabase').collection('gpsevent').aggregate([
{ "$match": { "deviceid": { "$in": idList}}},
{ "$sort": { "_id": -1} },
{"$unwind":"$values.minvalues.secvalues"},
//{"$project":{"deviceid":1,"values.minvalues.secvalues.lat":1,"values.minvalues.secvalues.min":1}} ,
{ "$match": { "values.minvalues.secvalues.priority": { "$eq": 1}}},
{ "$group": { "_id": "$deviceid" , "doc": { "$push": "$values.minvalues.secvalues" }}} ]).toArray();
如果有任何帮助,那将是非常充分的。
解决方案
您可以使用$addFields替换现有字段。由于您有两个级别的嵌套数组,您可以使用$map for external 和$filter for inner 检查您的条件:
db.col.aggregate([
{
$match: {
"_id": "5b3ad55f66479332a0482961",
"timestamp": "2018-06-17T00:30:00.000Z"
}
},
{
$addFields: {
values: {
$map: {
input: "$values",
as: "value",
in: {
minval: "$$value.minval",
minvalues: {
$filter: {
input: "$$value.minvalues",
as: "minvalue",
cond: {
$eq: [ "$$minvalue.secvalues.priority", 0 ]
}
}
}
}
}
}
}
}
])
推荐阅读
- javascript - 为什么使用不同的计算机时“WebRTC 屏幕共享”没有流式传输?
- javascript - 如何为通过 document.createAttribute("id") 创建的 id 赋值
- javascript - 为什么我的点击事件是最后一个事件?
- keras - Keras 层和自定义函数的输入是什么?
- azure-web-app-service - IDX21323 错误,有时在 azure b2c 中的 URL 中循环
- macos - Safari 是否仅将完整加载的页面放入历史记录中?
- c# - 尝试使用 JSON.NET 使用周围的 [] 字符反序列化 JSON
- excel - Export-Csv .csv 文件格式不正确
- user-interface - 托管在 IIS8 上时,Silverlight 无法正确呈现
- r - 如何检查一个数字序列是否是斐波那契序列并获得 R 中的下一个值?