【问题标题】:MongoDB & Meteor - Query to push into nested array does not work, no error thrownMongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误
【发布时间】: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 }
    }
);

【问题讨论】:

    标签: javascript arrays mongodb meteor database


    【解决方案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 对象。

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 2018-02-28
      • 2022-06-14
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多