mongodb - Mongoose 填充返回的 ObjectId 和空数组
问题描述
我有一个集合模型,它具有包含项目模型数组的项目属性。
const CollectionSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
items : [{type : mongoose.Schema.Types.ObjectId, ref: 'Item'}]
});
我试图填充 items 数组以获取 objectId 的属性,但 items 数组将返回空。(下面的代码是我如何填充 items 数组。我首先使用 req.body.search 通过 _id 找到了我正在寻找的集合。然后我运行 .populate("items") 以填充 items 数组。我得到的是一个空的 items 数组。)
userRouter.post('/iList', passport.authenticate('jwt', {session: false}), (req, res) => {
Collection.findById({_id : req.body.search}).populate("items").exec((err, document) => {
if(err)
res.json(err)
else
res.json({item: document})
})
});
我知道我的 items 数组不是空的,因为我可以在 mongoDB 上检查它是否已满。 我的 mongoDB 集合的图像,其中 items 数组不为空。
奇怪的是,如果我将“集合”放入 .populate 参数中,我的 Items 数组确实会返回一些东西,但它只返回 ObjectID 而不是实际的对象属性。我对为什么 .populate("items") 不起作用感到困惑。
解决方案
如果您使用的是 findById 那么为什么要指定{_id: req.body.search}
. 如果您的 req.body.search 是一种猫鼬 ObjectId 字符串,那么您可以直接使用它findById(req.body.search)
来代替。您也可以简单地使用投影。find 调用中的第二个参数是预测
如果您仅尝试获取项目数组,那么为什么不尝试此查询:-
Collection.findById(req.body.search, {items: 1}).then((result) => {
console.log('Items are :-\n', result);
}, (err) => {
console.log(err);
})
1 表示包含,0 表示排除。所以项目将出现在输出中,_id 也是输出中的默认值。如果您想排除 _id,那么您可以将第二个参数更改为此 ->{items: 1, _id: 0}
推荐阅读
- javascript - 基于时间的二维数组中的颜色变化点
- database - 具有超过 150 列的 ERD 的最佳实践
- javascript - 使用 Google Analytics 推送卡片的 onclick 页面视图
- python - Python Pandas:如何使用 if 条件按行求和?
- c++ - 如何将数组中每个名称的首字母大写?
- sql - 是否可以在 PLSQL 中用局部变量值分配全局变量值
- addeventlistener - fancyapp 的 addEventListener 加载失败
- node.js - kubernetes:gpg 解密后,来自秘密 yaml 的值在节点 js 容器中被破坏
- html - 为什么我不能从我的 scss 文件中调用我的 id 变量?
- python - 熊猫:如何根据不同的单元格将熊猫中的值从数据帧复制到另一个数据帧