更新的开头插入元素: 这里的问题是,本地的MongoDB驱动程序所需要的的objectID比猫鼬不同的格式。我需要做{_id:new mongoose.Types.ObjectId(story_id)},而不是{_id:story_id}。它仅返回两个字段的原因是它使用{_id:story_id}创建了一个新文档,而不是更新{_id:{$ oid:story_id}}文档。然而,我原来的原因与原生驱动程序与猫鼬做到这一点,结果不起作用。即使是本地驱动程序也不接受正的$ slice值。所以我仍然在寻找一种方法来使用Mongoose或通过Mongoose访问的本地驱动程序(不支持$ position或$ slice正值)插入一个数组的开头。findAndModify的MongoDB在阵列
当我运行下面的查询,返回的结果只包含_id,消息和参与者。我希望获得完整的故事记录,而不仅仅是更新后的字段。有没有办法做到这一点?根据Node MongoDB Native驱动程序文档(http://mongodb.github.io/node-mongodb-native/api-generated/collection.html#findandmodify),mongo控制台中的“fields”参数未在findAndModify驱动程序中实现。我想避免必须做第二次查询才能获得刚刚更新的记录。
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}
)
你是不是在调用['Story.findByIdAndUpdate'](http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate)?无论如何,你应该得到整个文档,而不仅仅是更新的领域。 – JohnnyHK 2014-09-21 13:28:15
猫鼬findByIdAndUpdate没有支持用于添加到阵列的开始,就像我跟$排序和$片在这里做(猫鼬看起来负$切片的值和如下所示不会返回整个返回一个错误。这个查询DOC回 – 2014-09-21 22:58:27