Mongodb 如何通过在第一个位置插入元素来更新数组
我想通过在数组的第一个位置添加新元素来更新文档 我实际上在做什么:Mongodb 如何通过在第一个位置插入元素来更新数组,mongodb,scala,Mongodb,Scala,我想通过在数组的第一个位置添加新元素来更新文档 我实际上在做什么: val updateRequest = myCollection.findOneAndUpdate(and(equal("site_id", new ObjectId(siteId)),and(equal("image_name", imageName))), addToSet("url_history", urlHistory)) 结果: { "_id" : ObjectId("5e297ea0c7ede90
val updateRequest = myCollection.findOneAndUpdate(and(equal("site_id", new ObjectId(siteId)),and(equal("image_name", imageName))),
addToSet("url_history", urlHistory))
结果:
{
"_id" : ObjectId("5e297ea0c7ede90a7ae7586e"),
"image_name" : "test.jpg",
"url_history" : [
{
"date" : ISODate("2020-02-08T10:43:47.127Z"),
"url" : "No image url"
},
{
"date" : ISODate("2020-02-11T10:43:47.127Z"),
"url" : "test.jpg"
}
]
}
{
"_id" : ObjectId("5e297ea0c7ede90a7ae7586e"),
"image_name" : "test.jpg",
"url_history" : [
{
"date" : ISODate("2020-02-11T10:43:47.127Z"),
"url" : "test.jpg"
},
{
"date" : ISODate("2020-02-08T10:43:47.127Z"),
"url" : "No image url"
}
]
}
所需结果:
{
"_id" : ObjectId("5e297ea0c7ede90a7ae7586e"),
"image_name" : "test.jpg",
"url_history" : [
{
"date" : ISODate("2020-02-08T10:43:47.127Z"),
"url" : "No image url"
},
{
"date" : ISODate("2020-02-11T10:43:47.127Z"),
"url" : "test.jpg"
}
]
}
{
"_id" : ObjectId("5e297ea0c7ede90a7ae7586e"),
"image_name" : "test.jpg",
"url_history" : [
{
"date" : ISODate("2020-02-11T10:43:47.127Z"),
"url" : "test.jpg"
},
{
"date" : ISODate("2020-02-08T10:43:47.127Z"),
"url" : "No image url"
}
]
}
你试过“$position”操作符吗?看一看
使用猫鼬会是这样的:
const schema = Schema({ nums: [Number] });
const Model = mongoose.model('Test', schema);
const doc = await Model.create({ nums: [3, 4] });
doc.nums.push(5); // Add 5 to the end of the array
await doc.save();
// You can also pass an object with `$each` as the
// first parameter to use MongoDB's `$position`
doc.nums.push({
$each: [1, 2],
$position: 0
});
doc.nums; // [1, 2, 3, 4, 5]
来自猫鼬文件
你真的需要把它插入第一个位置吗?也许保留数组顺序是个好主意,当你获取它的值时,你可以按你想要的方式排序,你怎么看?我终于找到了一个解决方案 这是:
val updateRequest = myCollection.findOneAndUpdate(and(equal("site_id", new ObjectId(siteId)),and(equal("image_name", imageName))),
pushEach("url_history", PushOptions().position(0), urlHistory))
我使用了按钮选项
希望能有帮助
资料来源:
我找到了“$position”操作符,我已经在mongo shell中使用了它,但我不知道如何在scala中使用它。感谢您的建议,但出于一些重要原因,我必须将它放在第一个位置(除其他外,不必遍历整个数组)