gpt4 book ai didi

node.js - findAndModify MongoDB 在数组开头插入元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:49 26 4
gpt4 key购买 nike

更新:这里的问题是 native MongoDB 驱动程序需要与 Mongoose 不同格式的 objectID。我需要做的不是 {_id:story_id},而是 {_id: new mongoose.Types.ObjectId(story_id)}。它只返回两个字段的原因是它正在创建一个带有 {_id:story_id} 的新文档,而不是更新 {_id: {$oid:story_id}} 的文档。然而,我最初使用 native 驱动程序与 mongoose 进行此操作的原因被证明是行不通的。即使 native 驱动程序也不接受正 $slice 值。因此,我仍在寻找一种使用 Mongoose 或通过 Mongoose 访问的 native 驱动程序(不支持 $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}

)

最佳答案

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

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

关于node.js - findAndModify MongoDB 在数组开头插入元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com