如何正确地将对象 $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
        );
    );

但这会使节点服务器崩溃。我已经尝试了它的一些变体,但无法使其正常工作。我确定我在这里遗漏了一些明显的东西或者我的理解存在差距。

请指教。

更新: 现在可以通过将$upsertmulti 选项添加到更新函数中,如下所示:

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 列表?

如何正确地将对象/指针存储到 Qlist 中

如何使用 React Hooks 和 Context API 正确地将来自 useEffect 内部调用的多个端点的数据添加到状态对象?

如何使用 jquery ajax 正确地将 json 对象传递给烧瓶服务器

如何有效地将节点添加到段树中以进行最小范围查询?

如何正确地将日期时间从 c# 传递到 sql?