【问题标题】:find according to referenced objectid根据引用的objectid查找
【发布时间】:2016-05-04 07:18:09
【问题描述】:

我有这个架构:

var scheme = schema({
    name: { type: String, required: true },
    deleted: { type: Boolean, default: false },
    user: {
        type: ObjectId,
        ref: 'User'
    },
    created: {type: Date, default: Date.now},
    modified: {type: Date, default: Date.now},
    eventinfo: { type: String, required: false },
    street: { type: String, required: false },
    city: { type: String, required: false },
    country: { type: String, required: false },
    postalcode: { type: String, required: false },
    usecurrentlocation: { type: Boolean, required: false },
    schedule_agenda_html: { type: String, required: false },
    gspsetup_html: { type: String, required: false },
    evdropboxstat: { type: Boolean, required: false },
    evsponsors_html: { type: String, required: false },
    evexhibitors_html: { type: String, required: false },
    floorplan_html: { type: String, required: false },
    social_media_fb: { type: String, required: false },
    social_media_tw: { type: String, required: false },
    social_media_li: { type: String, required: false },
    evorganizers_html: { type: String, required: false },
    coverscreen_img: { type: String, required: false },
    logo_img: { type: String, required: false },
    background_img: { type: String, required: false },
    background_color: { type: String, required: false },
    event_fromdate: {type: Date, default: Date.now},
    event_todate: {type: Date, default: Date.now},
    attendees_feedback: { type: Boolean, required: false },
    social_network: { type: Boolean, required: false },
    feature_icon_color: { type: String, required: false }
    });
exports.EacEvent = mongoose.model("EacEvent", scheme);

我需要找到用户 _id 等于这样的东西的所有 EacEvents (56a8a1eaf7a3289c10c9ed30) 我已经尝试了很多东西,但要么我得到了所有的 EacEvents,要么没有 EacEvent。谢谢

路由文件

这是我用来获取所需结果的路由文件代码..

var models = require('../models')
    ,mongoose = require('mongoose')
    var schema = mongoose.Schema;
    var ObjectId = schema.ObjectId;
// var ObjectID = schema.ObjectId;
exports.myeventapps = function (req, res) {
    var eac_userid;
    if (req.user){
        eac_userid =  JSON.stringify(req.user._id);
        console.log('================================' + eac_userid);
    }
    //models.EacEvent.find().exec(function(err, myevents) {
    models.EacEvent.find({ deleted: false,'user._id':ObjectId(eac_userid)}).sort({ modified: -1 }).exec(function(err, myevents) {
        res.locals.myevents = myevents;     
        console.log('================================' + myevents);
        res.render('eac_myevent_apps', { title: "My Event Apps", myeventapps: myevents });
    });
}

我也尝试在 .populate() 函数中比较 user._id,但没有得到所需的结果

【问题讨论】:

  • 您是在与字符串进行比较吗?对象 ID 和字符串不能直接比较。见stackoverflow.com/questions/11637353/…
  • 注意:ObjectID 有一个方法 .equals(string_value) 可以用来与字符串进行比较
  • 能否添加您尝试过的代码?否则,我们不知道您遇到的问题
  • @zangw 我已经更新了代码请查看代码
  • @joe 请告诉我在哪里使用 .equals() 我已经更新了代码

标签: node.js mongodb mongoose


【解决方案1】:

请试一试,直接匹配user字段,而不是user._id。 参考Mongoose Populate

 models.EacEvent.find({ deleted: false, 'user': ObjectId(eac_userid)}).sort(...

也许我们可以直接使用req.user._id

 models.EacEvent.find({ deleted: false, 'user': req.user._id}).sort(...

【讨论】:

  • cannot user req.user._id 它给出的_id 是未定义的.. 尝试'user': ObjectId(eac_userid) 时它没有显示结果
  • @akmalsaeed,如果 req.user._id 未定义,eac_userid = JSON.stringify(req.user._id); 如何工作?还是 eac_userid 的值为 null?
  • 谢谢@zangwa 我以前试过但没用...现在它就像一个奇迹heppend :D ...再次感谢:)
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2016-09-27
  • 2022-01-16
相关资源
最近更新 更多