【问题标题】:Mongodb lookup with two ObjectId带有两个 ObjectId 的 Mongodb 查找
【发布时间】:2017-12-13 10:00:11
【问题描述】:

我在查找工作时遇到了一点问题。它返回一个空数组。我在计费集合中使用 contactId 字段。我使用在 mongodb 的联系人集合中输入时创建的联系人 _id(可以在 Robomongo 中看到)。我有几个与少数联系人的 _id 对应的 ContactId 的帐单。我的语法正确吗?我错过了什么吗?谢谢您的帮助。 下面是我的查找语法

        Contact.aggregate([
            {
                $lookup: {
                    from: "Billing",
                    localField: "_id",
                    foreignField: "contactId",
                    as: "BillingMembership"
                }
            }
        ]).exec(function (err, contacts) {
            if (err) {
                return res.status(500).json({
                    title: 'An error occurred',
                    error: err
                });
            }
            res.status(200).json({
                message: 'Success',
                obj: contacts
            });
        });
下面是我从数据库中得到的结果。

(4) [Object, Object, Object, Object]
0:Object
BillingMembership:Array(0)
length:0
__proto__:Array(0)
additionalInterests:"MFM/REI"
billingEmail:"john@netdr.net"
cellPhone:6787025500
dateBirth:"1555-02-02T00:00:00.000Z"
firstName:"qtazerqr'efsg"
gogsMbrType:"Resident Applicant"
gogsYearJoined:"20111"
homePhone:6787025500
lastName:"gzaetrsg"
memberSuffix:", DO"
middleName:"fzerqgrre"
notes:"htrfjghdnt"
officeEmail:"john@netdr.net"
officePhone:6787025500
personalEmail:"john@netdr.net"
practiceId:"592e4c1638a494089c50c8c8"
praticeType:"MFM/High Risk"
spFirstNm:"gsertdhy"
spLastNm:"rthytrfgj"
spSuffix:"syhtdrh"
website:"trshdty"
__v:0
_id:"5932db29eb4dfe0de4a8a36d"
__proto__:Object
1:Object
2:Object
3:Object

Mongoose 架构联系人

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');

var schema = new Schema({
    firstName: {type: String, required: true},
    middleName: {type: String, required: true},
    lastName: {type: String, required: true},
    dateBirth: {type: Date, required: true},
    memberSuffix: {type: String, required: true},
    officePhone: {type: Number, required: true},
    homePhone: {type: Number, required: true},
    cellPhone: {type: Number, required: true},
    officeEmail: {type: String, required: true},
    billingEmail: {type: String, required: true},
    personalEmail: {type: String, required: true},
    gogsMbrType: {type: String, required: true},
    gogsYearJoined: {type: String, required: true},
    spFirstNm: {type: String, required: true},
    spLastNm: {type: String, required: true},
    spSuffix: {type: String, required: true},
    notes: {type: String, required: true},
    praticeType: {type: String, required: true},
    additionalInterests: {type: String, required: true},
    website: {type: String, required: true},
    practiceId: {type: Schema.Types.ObjectId, ref: 'Practice'}
});

schema.plugin(mongooseUniqueValidator);

module.exports = mongoose.model('Contact', schema);

Mongoose 架构计费

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');

var schema = new Schema({
    reason: {type: String, required: true},
    amount: {type: Number, required: true},
    membership: {type: String, required: true},
    membershipYear: {type: Schema.Types.ObjectId, ref: 'Membership'},
    type: {type: String, required: true},
    date: {type: String, required: true},
    contactId: {type: Schema.Types.ObjectId, ref: 'Contact'}, 
    conferenceId: {type: Schema.Types.ObjectId, ref: 'Conference'}
});

schema.plugin(mongooseUniqueValidator);

module.exports = mongoose.model('Billing', schema);

【问题讨论】:

  • 把你的from: "Billing"改成from:name of collection(可能是billings
  • 谢谢 Veeram,它有效!这太奇怪了,我将我的模型导出为“计费”!为什么我必须使用“帐单”?非常感谢!!!!
  • 不客气。 $lookup 在服务器端解析。所以它需要集合名称与猫鼬模型相反。

标签: node.js mongodb lookup aggregation objectid


【解决方案1】:

解决了。感谢 Veeram。

我使用将您的从:“帐单”更改为:“帐单”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多