更新:这里的问题是本机MongoDB驱动程序需要与Mongoose不同格式的objectID . 而不是我需要做的{id:story_id},{ id:new mongoose.Types.ObjectId(story_id)} . 它只返回两个字段的原因是它创建了一个带有{_id:story_id}的新文档,而不是更新{_id:{$ oid:story_id}}的文档 . 但是,我最初使用本机驱动程序与mongoose执行此操作的原因结果不起作用 . 即使是本机驱动程序也不接受正$ slice值 . 所以我仍在寻找一种方法,使用Mongoose或通过Mongoose访问的本机驱动程序(不支持$ position或正$ slice值)将对象插入数组的开头 .
当我运行下面的查询时,返回的结果只包括_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}
)
1 回答
您可以在数组字段的开头插入元素
$push
,它使用$each
和$position修饰符(Mongoose支持):