Javascript mongoose.js:如何在使用“填充”时从引用的子数组中删除属性,并将其中一个子数组字段用作过滤器?
我在使用mongoose包的NodeJS中有以下代码 1) 如果我使用的是填充方法,如何删除响应中Foundation数组中的字段总数??。因为该数组是由对另一个集合的引用形成的 2) 如何使用“活动.状态”字段仅筛选状态为“活动”的活动 定义: 基础模型Javascript mongoose.js:如何在使用“填充”时从引用的子数组中删除属性,并将其中一个子数组字段用作过滤器?,javascript,mongoose,nosql,Javascript,Mongoose,Nosql,我在使用mongoose包的NodeJS中有以下代码 1) 如果我使用的是填充方法,如何删除响应中Foundation数组中的字段总数??。因为该数组是由对另一个集合的引用形成的 2) 如何使用“活动.状态”字段仅筛选状态为“活动”的活动 定义: 基础模型 var mongoose=require('mongoose'); var Schema = mongoose.Schema; var foundation = new Schema({ twitter_account:{typ
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);
在活动模型中,我有一个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"
]
}
]
期望响应(只想在活动对象中删除基础数组字段):
有什么想法吗?。非常感谢
编辑:为了便于将来参考,要使用populate筛选在“活动”JSONArray上具有state=“Active”的对象,我使用以下方法实现:
var results=Foundation.find({},{twitter_帐户:1,名称:1,活动:1})
您可以使用“用选择填充”
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);
});
只需查看猫鼬文档
您可以使用“用选择填充”
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);
});
只需查看猫鼬文档
回答得很好,我的朋友……我阅读了关于填充的文档,我完成了工作……我编辑了原始帖子,留下了关于如何在使用填充时过滤JSON数组属性的答案。谢谢!!回答得很好,我的朋友…我阅读了关于填充的文档,我完成了工作…我编辑了原始帖子,留下了关于如何在使用填充时过滤JSON数组属性的答案。谢谢!!
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);
});