插入数组?

时间:2014-09-10 00:01:23

标签: javascript node.js mongodb coffeescript mongoose

我正在尝试在数组中的特定索引处插入项目,该数组可能为空,也可能不为空。例如,假设我的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数组的事实有关吗?

1 个答案:

答案 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.