TypeError:utils.populate:无效的路径。预期的字符串。得到typeof'undefined'

时间:2018-11-06 18:44:28

标签: mongodb mongoose

我正在尝试使用populate operator的猫鼬来合并产品及其用户/所有者。

我制作了产品架构的“导出”模型,并指定了所有字段,如下所示:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const someSchema= new Schema({
  something1: String,
  customers: [{ type: Schema.Types.ObjectId, ref: "customers" }],
  price: Number,
  ...
})
module.exports = mongoose.model("products", someSchema, "products");

我设法从产品的用户/所有者中保存了_id,在MongoDB Compass中,它以橙色"ObjectId('...')"的形式出现,并且该ID与“客户”集合中的用户匹配(手动查看)。

但是当我使用以下命令在另一个模块中运行搜索时:

  const model = require("../../models/productModel");
  model
    .populate("customers")
    .find({ < some fields> })
    .then( ... )
    .catch( ... )

它在控制台中引发以下错误:

TypeError: utils.populate: invalid path. Expected string. Got typeof `undefined`

我在这里错过了什么吗?我尝试了将近一个小时,却一无所获。抱歉,如果我错过了重要的事情,我有些累了。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我知道了。

问题是我打错了电话populate

我在打电话:

  model
    .populate("customers")
    .find({ < some fields> })
    .then( ... )
    .catch( ... )

但这必须必须按以下顺序进行:

  model
    .find({ < some fields> })
    .populate("customers")
    .then( ... )
    .catch( ... )

因为我们必须先find个文档才能populate,否则就没有任何意义。

也供以后参考,如果仅指定.populate("customers"),则不会神奇地填充所有ID字段,还必须指定哪个字段。您可以这样做:

.populate({ path: "key_to_fill", model: "customers" })

现在它将用key_to_fill中找到的文档替换customers

您可以在此处找到其他参数和选项:https://mongoosejs.com/docs/populate.html(官方文档)