MongoDB - 推送或更新Array中的元素

时间:2014-06-09 06:15:25

标签: arrays mongodb mongoose

在产品系列中,我有一个recentviews数组,其中包含2个字段viewedBy& viewedDate

我正在使用数组中的$push新元素,所以我使用下面的查询: -

db.produts.update( { _id: 'ObjectId("536c55bf9c8fb24c21000095")' },
                    { $push: { recentviews: [ { viewedby: 'xyz', vieweddate: ISODate("2014-05-09T04:12:47.907Z") } ] } }
            )

以上查询有什么问题?

此外,如果记录已经存在,例如,如果已经有viewedby xyz的记录,我需要更新记录,vieweddate

2 个答案:

答案 0 :(得分:1)

{ _id: 'ObjectId("536c55bf9c8fb24c21000095")' }应该没有引号,因为它被引用为字符串而不是objectId,它不等于你的主键。

{ _id: ObjectId("536c55bf9c8fb24c21000095") }

x1:PRIMARY> typeof( 'ObjectId("536c55bf9c8fb24c21000095")' )
string
x1:PRIMARY> typeof( ObjectId("536c55bf9c8fb24c21000095") )
object

答案 1 :(得分:1)

您无需指定括号[]

db.produts.update( 
    { _id: ObjectId("536c55bf9c8fb24c21000095") },
    { 
        "$push": { 
            "recentviews": { 
                "viewedby": "xyz",
                "vieweddate": ISODate("2014-05-09T04:12:47.907Z")
            } 
        }
    }
)

因此,当向数组添加新的子文档时,它只是以这种方式指定并添加到左侧提到的数组中。

此外,引用的ObjectId值会阻止.update()进行匹配。