findAndModify在数组开始处插入MongoDB元素

更新:这里的问题是,本地MongoDB驱动程序需要与Mongoose不同的格式的objectID。 而不是{_id:story_id}我需要做{_id:new mongoose.Types.ObjectId(story_id)}。 它只返回两个字段的原因是它使用{_id:story_id}创build了一个新的文档,而不是更新{_id:{$ oid:story_id}}的文档。 然而,我原来的原因与本土司机与mongoose做到这一点,结果不起作用。 即使是本地驱动程序也不接受正的$ slice值。 所以我仍然在寻找一种方法来使用Mongoose或通过Mongoose访问的本地驱动程序(不支持$ position或正$ slice值)插入一个数组的开始。

当我运行下面的查询时,返回的结果只包含_id,消息和参与者。 我想获得完整的故事logging,而不仅仅是更新的字段。 有没有办法做到这一点? 根据Node MongoDB本地驱动程序文档( http://mongodb.github.io/node-mongodb-native/api-generated/collection.html#findandmodify),mongo控制台中的“fields”参数未在findAndModify驱动程序中实现。 我想避免必须做第二个查询来获取刚更新的logging。

Story.collection.findAndModify( {"_id": story_id}, {"_id": "asc"}, { "$push": { "messages": { "$each": [message], "$sort": { "_id": -1}, "$slice": 500 }, }, "$addToSet": {"participants": user_id}, }, {new: true}, {fields: {"feeling":1, "description":1, "image_height":1, "image_width":1, "storyteller":1, "image_url":1, "participants":1}}, // -> this line is ignored by MongoDB native driver {upsert: true} ) 

您可以使用$each$position修饰符(它受Mongoose支持)的$push在数组字段的开头插入元素:

 Story.findByIdAndUpdate(story_id, { $push: { messages: { $each: [message], $position: 0 }, }, $addToSet: {participants: user_id}, }, { new: true, upsert: true }, function (err, newDoc) { ... } );