小编Jus*_*eed的帖子

Node.js猫鼬.update与ArrayFilters

就目前而言,我可以使用Mongo Shell使此功能正常工作,但是使用Mongoose可以解决Node.js内部嵌套数组的问题。

成功的Mongo Shell命令:

db.test.update({}, {$set: {"this.$[i].that.$[x].amnt": 10000}}, {arrayFilters: [{"i._id": ObjectId('5a568059bc44142a9ca33d09')}, {"x.userId": ObjectId('5a466acb864c752f8c9890c6')}]})
Run Code Online (Sandbox Code Playgroud)

结果:将amnt字段更改为10000。在从数据库中提取的给定字符串上调用ObjectId('')之前,没有返回任何匹配项。

Node.js代码:

var conditions = {}
var update = {$set: {"this.$[i].that.$[x].amnt": 1000}
var options = {arrayFilters: [{"i._id": weekId}, {"x.userId":  r.userId}]}

myModel.update(conditions, update, options, function(err, rowsAffected){
    // handler 
}
Run Code Online (Sandbox Code Playgroud)

结果:{ok:0,n:0,nModified:0}

_id和userId是模型的架构中的schema.Types.ObjectId。

我尝试使用3.6.1的最新文件更新node_modules / mongodb。看来猫鼬使用3.0.1。打印到控制台上的typeof(weekId)或typeof(r.userId)显示字符串的类型。我相信这会根据模式进行更改,但是无论哪种方式,我都尝试在这些项目上调用mongoose.Types.ObjectId(weekId)来查看是否可以解决此问题,但是没有运气。

MongoDB:3.6.1猫鼬:5.0.0-rc2

javascript mongoose mongodb node.js express

2
推荐指数
2
解决办法
1873
查看次数

标签 统计

express ×1

javascript ×1

mongodb ×1

mongoose ×1

node.js ×1