MongoDB findOneAndUpdate 返回 null
Posted
技术标签:
【中文标题】MongoDB findOneAndUpdate 返回 null【英文标题】:MongoDB findOneAndUpdate returns null 【发布时间】:2019-10-14 00:58:43 【问题描述】:我有这个,但我无法让它工作。 Console.log 记录为空。 如果我在更新代码之前登录,它实际上会记录我试图编辑的项目。如果我在 findOneAndUpdate() 之后执行此操作,它将返回 null。
编辑2:
我将 mongoose 方法更改为 findById 并且它起作用了。不过还是有一个问题。新代码:
let promo = await Promo.findById(req.body._id)
console.log('Promo findById(promoId) => ' + promo)
console.log('Promo Fields => ' + JSON.stringify(promoFields))
if (promo)
// Update
const promo = await Promo.findOneAndUpdate(
promo: req.body_id ,
$set: promoFields ,
new: true ,
(err, doc) =>
console.log(err + ' <--- err ///// ' + doc + ' <--- doc ')
)
return res.json(promo)
输出:
[0] Promo findById(promoId) => _id: 5cee8b0134349e1eec482053,
[0] title: 'Dos',
[0] subtitle: 'dos',
[0] desc: 'dos',
[0] __v: 0
[0] Promo Fields => "title":"Dos","subtitle":"dos","desc":"dos"
[0] null <--- err ///// _id: 5cee6bcbcfd3f11d580aa715,
[0] new: false,
[0] desc: 'dos',
[0] subtitle: 'dos',
[0] title: 'Dos' <--- doc
现在的问题是,无论我编辑列表中的哪个项目,它总是会更新第一个项目。会不会是id不匹配?如果我从 req 调试 id,我从所选项目中获得了正确的 id。不知道它为什么会这样。 最后但并非最不重要的是减速器:
const initialState =
promos: null
export default function(state = initialState, action)
const type, payload = action
switch (type)
case POST_PROMOS:
return
...state,
...payload,
loading: false
default:
return state
我想知道我是否可以在 reduce 中制作类似
state.promos.filter(promo => promo._id !== payload)
然后使用有效负载项生成一个新数组。我在混合概念?
提前谢谢你
【问题讨论】:
promoFields
指的是什么?
我的坏@developing2020,已经编辑过。
我读到它在更新之前记录了该项目。那么你可以在 findOne 之后添加 console.log(promo) 的输出吗?
@JackRed 如果我在if(promo)
行之前运行它,它会记录实际项目
@JackRed 并且如果我 return res.json(promo), console.log(promo)
都在同一行中,然后记录它,它会保持为空
【参考方案1】:
宾果! 似乎 req.body._id 出于某种原因,即使它是来自所需编辑项的 Id,但它不是 ObjectId。
我let promoId = mongoDb.ObjectId(req.body._id)
然后
promo = await Promo.findOneAndUpdate(
_id: promoId ,
$set: promoFields ,
new: true
)
:)!谢谢
【讨论】:
【参考方案2】:您应该使用$addToSet
代替$set
,它可能会起作用。
【讨论】:
相同的输出.. null。可以是模型id吗? 你调试了吗?也许你错过了一些东西。以上是关于MongoDB findOneAndUpdate 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB - Mongoose 查询 findOneAndUpdate() 不更新/复制数据库
findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]
findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]
如何在 mongodb 的 findOneAndUpdate 中使用对象作为过滤器