我有一個物件,看起來像這樣。(這是Mongoose查詢的輸出)
let systems = [
{
"maxUserLevel"/span>: 1,
"subsystems": [
{
"section": [],
"name": "apple"。
},
{
"section": [
{
"name": "香蕉": "香蕉".
}
],
"name": "太陽",
},
{
"section": [],
"name": "orange"。
}
],
"systemID": "12345"。
},
{
"maxUserLevel": 3,
"subsystems": [
{
"section": [],
"name": "blue"。
},
{
"section": [
{
"name": "pink"。
}
],
"name": "red",
},
],
"systemID": "15654"。
}];
Mongoose的查詢:
this.model。 System.find({username: user.username}, {
_id: 0,
allowedOrganizations: 0,
name: 0,
updatedAt: 0,
createdAt: 0,
versionKey: 0populate(
{
path: "subsystems"。
populate: {
path: "section"。
select: "name -_id",
match: {
allowedUsers: user.id。
}
},
select: "name metadata -_id"。
}
)
.exec((error, systems) =>/span> {
return res.status(200).json({
data: systems,
success: true。
});
});
我正在尋找一種方法來移除沒有部分的子系統。
經過幾個小時的搜索,我認為沒有辦法根據嵌套的populate來過濾populate,所以我嘗試了一些方法,比如:
if (systems.subsystems.length > 0) {
let test = [] 。
systems.subsystems.forEach((value, index) => {
if (value.sections.length !==0) {
test[index] = value。
}
if (systems.subsystems.length ==index 1) {
return 測驗。
}
})
}
但是我不確定這是否是正確的方法。
uj5u.com熱心網友回復:
你可以用$filter這樣的聚合查詢:
db.collection.aggregate( [
{
"$project": {
"_id": 1,
"maxUserLevel": 1,
"subsystems": {
"$filter": {
"輸入"。"$subsystems",
"as": "s",
"cond": {
"$ne": [
"$$s.section",
[]
]
}
}
}
}
}
])
示例 這里
同時你的查詢應該包含一個$match階段(就像你的find階段)和$lookup。
uj5u.com熱心網友回復:
我不確定這是最好的方法,但它解決了我的問題:
const _ = require('lodash')。
systems.forEach((value, index) =>/span> {
systems[index].subsystems = _.filter(value.subsystems,
item => !item.sections.length ==0 !
);
if (systems.length ==index 1) {
return systems;
}
});
它洗掉了所有沒有部分的子系統。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/319856.html
標籤:
上一篇:Android實作頁面跳轉
下一篇:父子類上下強制轉換訪問權限問題
