如何正确地将对象 $push 到 MongoDB 模式属性中,类型:数组
Posted
技术标签:
【中文标题】如何正确地将对象 $push 到 MongoDB 模式属性中,类型:数组【英文标题】:How to correctly $push an object into MongoDB scheme property, type: array 【发布时间】:2018-06-21 12:18:46 【问题描述】:我有一个广告模型架构属性:
viewCount:
type: []
我有一个更新函数,我想像这样向该数组添加一个对象:
exports.updateAd = function(req, res)
var conditions = _id: req.body._id ;
var update = ;
if (req.body.viewCount)
update.$push =
viewCount:
'date': Date.now(),
'user': req.body.user
Ads.update(conditions, update, , function(err, result)
if (err) throw err;
res.jsonp(
'result': result
);
);
但这会使节点服务器崩溃。我已经尝试了它的一些变体,但无法使其正常工作。我确定我在这里遗漏了一些明显的东西或者我的理解存在差距。
请指教。
更新:
现在可以通过将$upsert
和multi
选项添加到更新函数中,如下所示:
exports.updateAd = function(req, res)
var conditions = _id: req.body._id ;
var update = ;
if (req.body.viewCount)
update.$push =
viewCount:
'date': Date.now(),
'user': req.body.user
Ads.update(conditions, update, $upsert:false, multi:false, function(err, result)
if (err) throw err;
res.jsonp(
'result': result
);
);
但是根据我在文档中阅读的内容,这两个属性都默认为 false。所以我不清楚为什么需要像这样明确设置它们。 https://docs.mongodb.com/manual/reference/method/db.collection.update/
【问题讨论】:
你在 mongo CLI 中试过了吗?只有在猫鼬它失败了? 刚刚做了。它可以从 CLI 正常工作:db.ads.update(_id:ObjectId('5a530eb483a0e1122b24a251'), $push: viewCount: user:"555b97c3fcf9464d49276f03", date:Date.now())
它一定与update =
update.$push = ...
和我的更新对象中没有正确的层次结构有关...?
您可以在更新前后发布一个示例文档吗?
为可读性添加了这些更新选项,问题在于更新层次结构
【参考方案1】:
你可以试试
var conditions = _id: req.body._id ;
var options = $upsert : false, multi : false ;
var update = $push :
viewCount:
'date': Date.now(),
'user': req.body.user
;
Ads.update(conditions, update, options, function(err, result) ...
【讨论】:
是的!那行得通!那么这些选项是怎么回事呢?我所做的只是将 $upsert 和 multi 属性放入函数的更新选项对象中,它现在可以工作了。 不,您形成更新文档的方式可能是个问题。能不能在更新前后发个文档,看看?以上是关于如何正确地将对象 $push 到 MongoDB 模式属性中,类型:数组的主要内容,如果未能解决你的问题,请参考以下文章
如何正确地将 RealmDB 结果对象映射到 SwiftUI 列表?
如何使用 React Hooks 和 Context API 正确地将来自 useEffect 内部调用的多个端点的数据添加到状态对象?