我正在尝试在数组中的特定索引处插入项目,该数组可能为空,也可能不为空。例如,假设我的mongoDb集合中有以下文档:
{
title: "abe",
questions: []
}
我想做一些事情,比如将数组中的第5个元素设置为特定值。我正在使用mongo db命令行,我能够执行以下操作:
> mytest = []
[ ]
> mytest[4] = 'test'
test
> mytest
[ undefined, undefined, undefined, undefined, "test" ]
这基本上就是我想要的,但是当我尝试从我的node.js代码执行此操作时,我得到了奇怪的结果(奇怪的是,项目不在正确的索引中)。代码如下:
Mongoose Schema定义:
mongoose = require("mongoose")
Schema = mongoose.Schema
surveySchema = new Schema
title: String
questions: [
type: Schema.Types.ObjectId
ref: 'Question'
]
执行更新的代码:
surveys.update {id: doc.survey_id},
{
$push: {
questions: {
$each: [doc._id],
$position: doc.sort_order
}
}
},
{upsert:false, multi:true},
callback
上面的代码是在异步循环中执行的,因此最后一项可能会在第一项之前插入,依此类推。
任何人都可以看到为什么不会在正确的索引中插入项目的原因吗?为什么我的基本示例有效,但代码却没有?这可能与我的架构将问题定义为ObjectIds数组的事实有关吗?
答案 0 :(得分:1)
MongoDB $position的文档:
If the number is greater or equal to the length of the array, the $position modifier has no effect and the operator adds elements to the end of the array.