【问题标题】:How to select specific field in nested populate in mogoose如何在猫鼬的嵌套填充中选择特定字段
【发布时间】:2016-09-30 10:27:46
【问题描述】:

这是我的架构:

var UserSchema = new Schema({
    email: String,
    name: String,
    city: String,
    username: String,
    profilePic: String,
    phoneNo: Number,
    shortList: {
        project: [{ type: Schema.ObjectId, ref: "Project" }],
        flat: [{ type: Schema.ObjectId, ref: "Flat" }],
    },

});

var FlatSchema = new Schema({
    project: { type: Schema.ObjectId, ref: "Project" },
    status: String,
    floor: Number,
    size: String,
    type: String,
    flat_number: String,
    price: Number,
    flooringType: String,
    createdAt: { type: Date, 'default': Date.now },
    isDeleted: { type: Boolean, 'default': false },
   });

var ProjectSchema = new Schema({
    name: String,
    shortName: String, 
    developer: { type: Schema.ObjectId, ref: "Developer" },
    address: {
        street_address: String,
        city: String,
        state: String,
        pin: Number,
        position: {
            lat: Number,
            long: Number
        }
    },
    ofcAddress: {
        street_address: String,
        city: String,
        state: String,
        pin: Number,
    },

    overview: {
        size: String,
        area: String,
        configuration: String,
        possession_starts: Date,
        info: String,
        aminities: [{ type: Schema.ObjectId, ref: "Amenity" }]
    },
    images: {
        hdpi: String,
        xhdpi: String,
        web: String,
        mdpi: String
    },

});

这里 userflat 模型的链接 shortList.flatflat 模型与 的链接项目

现在我正在尝试选择以下所有详细信息:

User.findById(req.params.id)
        .populate('shortList.project', { 'CalculationsRules': 0, 'KBFlatTypeCharges': 0, 'CategoryPremia': 0, 'Floor': 0, 'KBUnitType': 0, 'floorplans': 0, 'flats': 0, 'towers': 0, 'galaryImages': 0 })
        .populate('shortList.flat', { 'pricedetails': 0 })
        .exec((err, user) => {
            if (err) { return handleError(res, err); }
            if (!user) { return res.json(401); }
//here i want to select specific field from project model
            User.populate(user, { path: 'shortList.flat.project', model: 'Project' },  (err, user) => {
                res.status(200).json(user);
            })
        });

它工作正常,但我想从项目模型中选择一些特定字段,例如名称和图像

【问题讨论】:

    标签: mongodb mongoose mongoose-populate mongoose-schema


    【解决方案1】:

    在填充中使用选择属性:

    User.populate(user, { path: 'shortList.flat.project', model: 'Project', select: 'name' })
    

    这只会给你项目的名称。

    要指定您不想要的字段,您可以将其归零:

    User.populate(user, { path: 'shortList.flat.project', model: 'Project', select: { 'name': 0, 'Floor': 0, 'flats': 0, 'towers': 0,} }
    

    这对我有用。

    如果你正在做两个水平的人口:

    我们可以简单地这样做:

    populate('project.tower', 'name project flats');
    

    对于获取特定字段的简单填充:

    populate('project', 'name')
    

    【讨论】:

    • 谢谢!这就是我需要的!
    • 优秀的解决方案。像魅力一样工作!
    【解决方案2】:

    尝试这样做:

    applicantListToExport: function (query, callback) {
      this
        .find(query).select({'advtId': 0})
        .populate({
          path: 'influId',
          model: 'influencer',
          select: { '_id': 1,'user':1},
          populate: {
           path: 'userid',
           model: 'User'
          }
        })
        .populate('campaignId',{'campaignTitle':1})
        .exec(callback);
      }
    

    【讨论】:

    • 对我来说最好的答案
    猜你喜欢
    • 2013-10-07
    • 2019-05-04
    • 2019-12-07
    • 2018-10-15
    • 2019-01-16
    • 1970-01-01
    • 2021-11-07
    • 2021-12-25
    相关资源
    最近更新 更多