mongodb - MongoDB查询子文档$gt
问题描述
我已经搜索过其他帖子,但似乎工作正常的东西在这里不起作用。我需要你的建议。
这是我的文档在数据库中的样子,只是一个带有一系列标签的文档。
我只需要查询计数器大于 0 的餐厅类型,(因此最终结果将排除计数器 0 的任何类型)
我的架构
const tagsSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
details: {
restaurantTypeId: mongoose.Schema.Types.ObjectId,
restaurantTypes: [{
_id: mongoose.Schema.Types.ObjectId,
name: String,
counter: Number,
}],
foodTypeId: mongoose.Schema.Types.ObjectId,
foodTypes: [{
_id: mongoose.Schema.Types.ObjectId,
name: String,
counter: Number,
}]
}
});
我试过了
tags.find({
'details.restaurantTypes.counter': {
$gt: 0
}
}, (err, data) => {
if (err) {
res.send(err);
}
res.json(data);
});
我得到了
[
{
"details": {
"restaurantTypeId": "5c01fb57497a896d50f49877",
"restaurantTypes": [
{
"_id": "5c01fb57497a896d50f49879",
"name": "Asian",
"counter": 1
},
{
"_id": "5c01fb57497a896d50f4987a",
"name": "Bakery",
"counter": 0
},
{
"_id": "5c01fb57497a896d50f4987b",
"name": "Barbecue",
"counter": 0
},
{
"_id": "5c01fb57497a896d50f4987c",
"name": "Bars & Pubs",
"counter": 0
},
{
"_id": "5c01fb57497a896d50f4987d",
"name": "Bistro",
"counter": 0
},
和
tags.find({
'details.restaurantTypes.counter': {
$gte: 1
}
}, (err, data) => {
if (err) {
res.send(err);
}
res.json(data);
});
这给了我相同的结果
解决方案
您可以使用聚合管道来过滤 restaurantTypes
$match
- 过滤餐厅$addFields
$filter
-按柜台覆盖餐厅类型和餐厅类型
聚合管道
db.res.aggregate([
{$match: {"_id" : ObjectId("5c2187be640edfe094a3b946")}},
{$addFields:{"restaurantTypes" : {$filter : {input : "$restaurantTypes", as : "t", cond : {$ne : ["$$t.counter",0]}}}}}
])
推荐阅读
- docker - Docker - 没有名为“celery_worker”的模块
- csv - 处理约 1500 万行代码后,代码似乎只是冻结了
- jquery - jQuery - 通过多步表单导航的最佳方式是什么
- r - 在方差分析中获得显着结果后,我在 R 中的 TukeyTukeyHSD 中出现错误
- c# - 将数据从一个 Kendo Grid 传递到另一个位于弹出窗口内的 Kendo Grid
- sql - 如何在没有'with'的情况下将多个子查询合并为一个?
- django - 在 ModelForm 中显示计算的字段值
- reactjs - 如何使用三元运算符的道具
- javascript - 我如何使用 react-google-maps 组件绘制路线?
- c# - 使用没有 Group By 的连接表从 SELECT 语句返回单行