javascript - 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 来操作数组?
希望听到一些建议。谢谢你!
解决方案
首先,如果你想要一个项目数组,你应该使用 Model.find() 而不是 Model.findOne()。
是的,您可以使用投影参数来选择所需的字段。
所以
const supplies = await Supply.find({}, "name qty").exec()
编辑:显然您需要专门排除 _id 字段,您可以使用-
前缀来执行此操作。
const supplies = await Supply.find({}, "-_id name qty").exec()
推荐阅读
- c# - 带有圆角的 C# WPF ComboBox IsMouseOver 不起作用
- google-maps - 没有 Google 帐单详细信息会破坏地图吗?
- google-cloud-platform - BigQuery 中的并发查询是什么?
- unit-testing - 无论存根权限如何,带有 checkPermission 的 Apache shiro 单元测试都会通过
- typescript - TypeScript 方括号的名称?
- arduino - ESP8266 EEPROM 或 FLASH 错误:使用虚假凭据成功连接到 Wifi
- numpy - Dask 数组 from_npy_stack 缺少信息文件
- twilio - Twilio 使用 REST API 删除子账户中的频道
- laravel - Laravel - 导入新的 Vue 组件
- c - 无法解决如何将函数作为参数传递