MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误

Posted

技术标签:

【中文标题】MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误【英文标题】:MongoDB & Meteor - Query to push into nested array does not work, no error thrown 【发布时间】:2015-03-04 11:04:17 【问题描述】:

我正在尝试将数据推送到 Mongo 集合内的嵌套数组中。我已经按照这里的 Mongo 文档 http://docs.mongodb.org/manual/reference/operator/update/positional/ 进行了操作,但没有任何运气推入阵列。没有错误或异常被抛出,语法看起来正确...

在这个例子中,我试图通过将一个新字符串推入它的idArr 数组来更新标题为'Board One'buyer.boards。我的查询有问题吗?

Mongo 合集

// User Document from Meteor.users Collection:

    _id: 'userIdqwerty',
    buyer: 
        boards: [
            
                title: 'Board One',
                idArr: ['id123', 'id456', 'id678']
            ,
            
                title: 'Board Two',
                idArr: ['idABC']
            ,
            
                title: 'Board Three',
                idArr: ['id12345678', 'idqwertyuu']
            ,
        ]
    ;

Javascript

var options = 
    boardTitle: 'Board One',
    newId: 'idZjodFsp',
    userId: 'userIdqwerty'
;

Meteor.users.update(
     
        _id:options.userId, 
        'buyer.boards.$.title':options.boardTitle 
    ,
     $push:  
        'buyer.boards.$.idArr':options.newId 
    
);

【问题讨论】:

【参考方案1】:

update 函数的query 参数中删除位置运算符($)。

Meteor.users.update(
     
        _id:options.userId, 
        'buyer.boards.title':options.boardTitle 
    ,
     $push:  
        'buyer.boards.$.idArr':options.newId 
    
);

来自文档:

db.collection.update(
    <array>: value ... ,
    <update operator>:  "<array>.$" : value  
)

update 参数中应使用位置运算符,query 参数中应使用 not。这只会更新第一个具有匹配 titleboards 对象。

【讨论】:

以上是关于MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Meteor 运行时,如何从另一个客户端访问 Meteor 的 MongoDB?

推入 mongodb 中的文档数组

Meteor 无法连接到 MongoDB

在 Meteor.js 中使用多个 Mongodb 数据库

Meteor、MongoDB通过订阅获取部分数组

Meteor -- 如何连接到 mongodb? [复制]