【问题标题】:Mongoose get value from embedded documentMongoose 从嵌入式文档中获取价值
【发布时间】:2017-01-15 09:15:26
【问题描述】:

我有这样的方案

 var WFWorkItemDocument = new Schema({
        id: { type: String, required: true, unique: true, default: uuid.v1 },
        description: { type: String },
        period: [{
            id: { type: String, default: uuid.v1 },
            start: { type: Date, default: Date.now }
            due: { type: Number, integer: true },
            new: { type: Number, integer: true },
        }],

我想获得期间的到期值,因为我使用了类似的方法

    WorkItem.findOne({ id: idUpdate }, function(err, WorkItem) {
            if (err) {
                console.log("invlaid id");
                //return res.send(404, { error: 'invalid id' });
            }

            if (WorkItem) {
                console.log("id");
                console.log(WorkItem.period.due);

            } else {
                //res.send(404, new Error('Workitem not found'));
            }
});

但它不起作用我怎样才能获得应有的价值??

这是 console.log(WorkItem) 的结果

【问题讨论】:

  • 为什么不起作用?您的控制台日志记录是什么?也许这是因为有两个不同类型的“到期”字段?
  • 对不起,我编辑了它只有一个到期。它说由于未定义。我使用控制台日志只是为了查看控制台日志上的输出
  • 能否尝试在回调函数中更改工作项的名称?也许 WorkItem 引用的是 Schema 而不是它找到的 Document。例如:function(err, item) , if (item), 然后是 console.log(item.period.due)。请让我知道发生了哪些 console.log 消息!
  • 您将period 定义为嵌入数组
  • @dyouberg ya 我试过这样但它仍然没有定义

标签: node.js mongodb mongoose database nosql


【解决方案1】:

更改架构以嵌入一个对象。除非你需要嵌入式数组。

 var WFWorkItemDocument = new Schema({
        id: { type: String, required: true, unique: true, default: uuid.v1 },
        description: { type: String },
        period: {
            id: { type: String, default: uuid.v1 },
            start: { type: Date, default: Date.now }
            due: { type: Number, integer: true },
            new: { type: Number, integer: true },
        },

如果你将它定义为一个嵌入式数组,你可以像这样访问:

WorkItem.period[index].due

【讨论】:

  • 我试过 WorkItem.period[index].due 但它仍然给出未定义的错误。
  • @kohli 您使用哪个版本的 monsoose?而index 表示您输入一个索引号,例如01。如果您根据我的回答更改架构,则需要根据新架构插入新数据
  • 对不起,我现在得到了正确的值。我为此使用了 WorkItem.period[0].due。谢谢@Ebrahim Pasbani
  • 您获得了正确的值,但您必须这样做,因为您的架构错误。修复你的架构比每次都做一个解决方法更好。
  • @kohli ,dyouberg 是对的。您的数据模型需要修复。每个工作项仅嵌入一个句点
猜你喜欢
  • 1970-01-01
  • 2017-01-29
  • 2011-12-21
  • 2017-06-22
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多