我有一份这样的文件:
{
_id:ObjectId('111'),
products:[
{
_id:ObjectId('aaa'),
quantity:2,
price:800
}
]
}
我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。
更新后的文档:
{
_id:ObjectId('111'),
products:[
{
_id:ObjectId('aaa'),
quantity:2,
price:1600 //the updated field by multiplying the initial 800 * 2
}
]
}
我的选择查询如下:
Shop.findOneAndUpdate(
{ "_id": '111, "products._id": 'aaa' }
)
我怎样才能做到这一点?
正如@Casey在评论中建议的那样,您可以多步完成此操作,找到商店,找到产品,更改产品价格,保存商店。
router.patch("/shops/:shopId/:productId", async (req, res) => {
const { shopId, productId } = req.params;
let shop = await Shop.findById(shopId);
if (!shop) return res.status(400).send("Shop not found");
const productIndex = shop.products.findIndex((p) => p._id.toString() === productId);
if (productIndex < 0) return res.status(400).send("Product not found in shop");
let product = shop.products[productIndex];
product.price *= product.quantity;
shop = await shop.save();
res.send(shop);
});
假设您现有的这家商店有两种产品:
{
"_id": "5eb85ab17c2bfb3e2cfc15d0",
"products": [
{
"_id": "5eb85ab17c2bfb3e2cfc15d2",
"quantity": 2,
"price": 800
},
{
"_id": "5eb85ab17c2bfb3e2cfc15d1",
"quantity": 3,
"price": 500
}
]
}
如果您想用“\u id”:“5eb85ab17c2bfb3e2cfc15d2”更新价格,我们会向url发送补丁请求http://your基本url/店铺/5eb85ab17c2bfb3e2cfc15d0/5eb85ab17c2bfb3e2cfc15d2
输出将如下所示:
{
"_id": "5eb85ab17c2bfb3e2cfc15d0",
"products": [
{
"_id": "5eb85ab17c2bfb3e2cfc15d2",
"quantity": 2,
"price": 1600 => UPDATED
},
{
"_id": "5eb85ab17c2bfb3e2cfc15d1",
"quantity": 3,
"price": 500
}
]
}
在MongoDB版本上
Shop.update(
/** Remember to convert input strings to type `ObjectId()` prior to querying */
{ _id: ObjectId("111"), "products._id": ObjectId("aaa") },
/** This aggregation pipeline will re-create `products` array,
* if condition is met for an object then price will be multiplied & price field is merged to original object & pushed back to `products` array,
* if condition is not met actual object is pushed back to array */
[
{
$set: {
products: {
$map: {
input: "$products",
in: {
$cond: [
{ $eq: ["$$this._id", ObjectId("aaa")] },
{
$mergeObjects: [ "$$this", { price: { $multiply: ["$$this.quantity", "$$this.price"] }}]
},
"$$this"
]
}
}
}
}
}
]
);
我试图更新一个子文档(有效),然后更新除上一个子文档之外的多个子文档。基本上,每次
问题内容: 使用Mongoose可以一次性在一个(子)文档上设置多个属性吗?我正在尝试做的一个例子: 假设我有以下架构: 然后我想做: 通常,我可以使用运算符来实现此目的,但是我的问题是在此示例中是的子文档(嵌入式架构)。所以当我尝试去做 它替换了由标识的子文档实例。目前,我已经通过手动设置仅字段来“解决”它,但是我希望有一种更好的方法来做到这一点。 问题答案: 基于的字段以编程方式构建对象,以使
我想使用mongoose从多个文档更新多个子文档。 我目前的代码是: 模式的一部分是: 但是这段代码只更新id arr中的最后一个元素。
问题内容: 我正在使用MongoDB数据库,该数据库的收集模型包括 班级 , 学生 , 学科 和[学术] 表现 。以下是基于猫鼬的架构和模型: 该集合的文件是最复杂的地段; 示例文档为: 我能够使用以下代码检索现有的班级文档并将其添加到分数中: 但是,如何添加/更新/删除该特定学生的成绩?我需要能够通过以下方式与集合进行交互: 检索所有学生或特定学生的分数(检索数组中的特定元素) 为特定主题添加/
我有一份这样的文件 上面的文档可以这样概括如下,便于理解。 我需要增加nums子文档中数量的值,该值位于产品子文档中,基于其\u id。 这是我迄今为止所尝试的,但它不起作用,因为我不知道如何捕获nums对象内的\u id,以便更新子子文档数组中的特定对象。 我怎样才能做到这一点?
将mongodb与pymongo一起使用,我有以下文档: 我想更新示例子文档(这是一个数组元素,因为可能有多个示例)。我有以下代码,但它不工作... 谁能告诉我这个有什么问题吗?