首页 > 解决方案 > Mongoose 检索对象数组。对于每个对象,我只想要两个属性

问题描述

我只是在用 JavaScript 练习 Mongoose。

我在下面有这个猫鼬模式:

const item = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    unique: true
  },
  qty: {
    type: Number,
    required: true
  },
  costPrice: Number
});

const supplySchema = new mongoose.Schema({
  items: [item]
});

const Supply = mongoose.model("Supply", supplySchema);

现在我只想检索一个item使用猫鼬的数组。

我希望我的数据看起来像这样:

[
  {
    "name" : "Lemon",
    "qty" : 5
  },
  {
    "name": "Sugar",
    "qty": 5
  }
]

但现在我得到的数据看起来像这样:

[
  {
    "_id": "5e4df1c1d48926133879f650",
    "costPrice": 0.4,
    "name": "Sugar",
    "qty": 5
  }
]

我尝试在下面编写这样的代码,但它不起作用:

const supplyDoc = await Supply.findOne();
const supplies = await supplyDoc.items.select("-_id");
return supplies;

我想我可以以某种方式在项目上使用投影并指定我不想要数组中每个对象的 _id 属性。但是我的代码不起作用。我可以使用猫鼬或 MongoDB 方法吗?还是我必须使用 javascript 来操作数组?

希望听到一些建议。谢谢你!

标签: javascriptnode.jsmongodbmongoose

解决方案


首先,如果你想要一个项目数组,你应该使用 Model.find() 而不是 Model.findOne()。

是的,您可以使用投影参数来选择所需的字段。

所以

const supplies = await Supply.find({}, "name qty").exec()

编辑:显然您需要专门排除 _id 字段,您可以使用-前缀来执行此操作。

const supplies = await Supply.find({}, "-_id name qty").exec()

推荐阅读