![](/img/trans.png)
[英]How to remove Array inside subArray Null value Javascript using Filter
[英]mongoose.js: How do I remove a property from a subarray of references while using populate and use one of the subarray field as a filter as well?
我在使用猫鼬包的节点js中有以下代码。
1)如果我使用populate方法,如何在响应的Foundations数组中删除字段总数? 导致该数组由对另一个集合的引用形成。
2)如何使用“ campaigns.state”字段仅过滤以“ ACTIVE”为状态的广告系列?
定义:
基金会模型
var mongoose=require('mongoose');
var Schema = mongoose.Schema;
var foundation = new Schema({
twitter_account:{type: String, required: true, unique: true},
name:{type: String, required: true, unique: true},
pic_path: {type: String, required: true},
doc_path: {type: String, required: true},
campaigns: [{type: Schema.ObjectId, ref: 'Campaign'}]
},{
timestamps: true
});
module.exports = mongoose.model('Foundation', foundation);
在Campaigns模型上,我有Foundations字段,该字段是对Foundations的引用数组,我想在响应中将其切出以避免冗余
var campaign = new Schema({
.............
foundations: [{type: Schema.ObjectId, ref: 'Foundation'}],
......................
}
在这里检索数据的API路线
var express = require('express');
var router = express.Router();
var Foundation=require('../models/Foundation');
var mongoose= require('mongoose');
var Promise = require("bluebird");
var _ = require('lodash');
//get all Foundations
router.get('/get/all', function(req, res, next) {
var results=Foundation.find({},{twitter_account:1,name:1,campaigns:1})
.populate('campaigns').exec(function (err, foundation) {
if (err) return handleError(err);
console.log(foundation);
res.send(foundation);
});
});
module.exports = router;
这是响应:
[
{
"_id": "58229b253e1ad628e1ed975e",
"twitter_account": "@YYYYYYYYYYYY",
"name": "YYYYYYYYYYYY",
"campaigns": [
{
"_id": "5822a9444aea133044b6eb84",
"updatedAt": "2016-11-09T04:42:44.922Z",
"createdAt": "2016-11-09T04:42:44.922Z",
"total": 0,
"state": "ACTIVE",
"__v": 0,
"end_date": null,
"foundations": [
"58229b253e1ad628e1ed975e",
"58229b253e1ad628e1ed975f"
]
},
{
"_id": "5822a9444aea133044b6eb85",
"updatedAt": "2016-11-09T04:42:44.925Z",
"createdAt": "2016-11-09T04:42:44.925Z",
"remaining_ammount_to_goal": 500000,
"total": 0,
"state": "ACTIVE",
"__v": 0,
"end_date": null,
"foundations": [
"58229b253e1ad628e1ed975e"
]
}
]
},
{
"_id": "58229b253e1ad628e1ed975f",
"twitter_account": "@XXXXXXXXXXX",
"name": "XXXXXXXXX",
"campaigns": [
{
"_id": "5822a9444aea133044b6eb85",
"updatedAt": "2016-11-09T04:42:44.925Z",
"createdAt": "2016-11-09T04:42:44.925Z",
"total": 0,
"state": "ACTIVE",
"__v": 0,
"end_date": null,
"foundations": [
"58229b253e1ad628e1ed975e"
]
}
]
所需的响应(只想在Campaigns对象中放置基础数组字段):
[
{
"_id": "58229b253e1ad628e1ed975e",
"twitter_account": "@YYYYYYYYYYYY",
"name": "YYYYYYYYYYYY",
"campaigns": [
{
"_id": "5822a9444aea133044b6eb84",
"updatedAt": "2016-11-09T04:42:44.922Z",
"createdAt": "2016-11-09T04:42:44.922Z",
"total": 0,
"state": "ACTIVE",
"__v": 0,
"end_date": null
},
{
"_id": "5822a9444aea133044b6eb85",
"updatedAt": "2016-11-09T04:42:44.925Z",
"createdAt": "2016-11-09T04:42:44.925Z",
"remaining_ammount_to_goal": 500000,
"total": 0,
"state": "ACTIVE",
"__v": 0,
"end_date": null
}
]
},
{
"_id": "58229b253e1ad628e1ed975f",
"twitter_account": "@XXXXXXXXXXX",
"name": "XXXXXXXXX",
"campaigns": [
{
"_id": "5822a9444aea133044b6eb85",
"updatedAt": "2016-11-09T04:42:44.925Z",
"createdAt": "2016-11-09T04:42:44.925Z",
"total": 0,
"state": "ACTIVE",
"__v": 0,
"end_date": null
}
]
有任何想法吗?。 非常感谢你!!!
编辑 :供以后参考,使用填充过滤器在“ Campaigns” JSONArray上具有state =“ Active”的对象,我使用以下方法实现了此目的:var results = Foundation.find({},{twitter_account:1,name:1,campaigns :1})
.populate({path : 'campaigns' ,select :'-foundations', match:{state:'ACTIVE'}}).exec(function (err, foundation) {
if (err) return handleError(err);
console.log(foundation);
res.send(foundation);
});
您可以使用select填充
var results=Foundation.find({},{twitter_account:1,name:1,campaigns:1})
.populate({path : 'campaigns' ,select :'-foundations'})
.exec(function (err, foundation) {
if (err) return handleError(err);
console.log(foundation);
res.send(foundation);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.