我有一个MongoDb数据库,其中包含一个名为rooms
的集合。在rooms
中,我希望通过roomid
属性搜索特定对象。我想更新找到的对象中的数组内容。例如,最初,在向该endpoint发出请求之前,所需的数据如下所示:
{
available: true,
_id: 60817a403170bf49185c7db7,
player1: "Jack",
player2: "Adam",
roomId: "ABCDE",
pieces: [
{
point: [6, 0],
player: "1",
type: "P"
},
...
],
__v: 0
}
发出类似http://localhost:8000/room/abcde?x1=6&y1=0&x2=4&y2=0
的请求后,mongodb中的数据应更新为
{
available: true,
_id: 60817a403170bf49185c7db7,
player1: "Jack",
player2: "Adam",
roomId: "ABCDE",
pieces: [
{
point: [4, 0], /* DATA UPDATED */
player: "1",
type: "P"
},
...
],
__v: 0
}
这是我的api.js
文件,为了执行它,注释中的代码应该是什么?
const express = require('express');
const GameRoom = require('../models/room');
const router = express.Router();
router.put('/room/:id', (req, res, next) => {
GameRoom.findOne({roomId: req.params.id})
.then(data => {
const pieces = data.pieces;
for (let i = 0; i < pieces.length; i++) {
if (pieces[i].point[0] === parseInt(req.query.x1) &&
pieces[i].point[1] === parseInt(req.query.y1)) {
pieces[i].point = [req.query.x2, req.query.y2];
break;
}
}
// Take the modified pieces array and update it
}).catch(next);
});
您可以使用$[
GameRoom.updateOne(
{ roomId: req.params.id },
{ $set: { "pieces.$[el].point.0": req.query.x2, "pieces.$[el].point.1": req.query.y2 }},
{ arrayFilters: [ { "el.point.0": req.query.x1, "el.point.1": req.query.y1 } ]}
);
或者,如果您只想更新与条件匹配的第一部分,那么您可以使用$elemmatch和$operator:
GameRoom.updateOne(
{
roomId: req.params.id,
pieces: {$elemMatch: {"point.0": req.query.x1, "point.1": req.query.y1}}}
},
{ $set: {"pieces.$.point.0": req.query.x2, "pieces.$.point.1": req.query.y2} }
);
我已经搜索和尝试了许多答案,但我似乎无法让这个工作。我在MongoDB中有一个用户(db.users...)我试图在一个特定的文档中更新一个名为“角色”的字段。如果我执行: assert失败:需要对象错误:在printStackTrace(src/mongo/shell/utils.js:37:15)在doassert(src/mongo/shell/assert.js:6:5)在assert(s
我是否可以在具有的数组中嵌入对象的数组的第二个元素? 结果:
例如,我可以运行这个mongo查询: 我们如何用代码和spring MongoTemplate来实现这一点呢?例如,下面是UPDATE一个值的代码: Update#set方法似乎只接受一个(key、value),而不接受多值或值列表。
mongodb新手,尝试更新文档的多个数组对象字段。没有得到预期的结果 文档结构: 基于id需要更新日期 Spring启动代码 但是当我运行这个查询时,它返回null。有人能帮我吗?谢谢,我也试过了
我正在使用Spring-Boot 2.5.0和MongoDB来持久化一些文档。这里是Github项目。 对于每个文档,我还需要自动保存一些审计信息,因此我扩展了以下类: 例如。让我们考虑类: 我遇到的问题是,当我通过JSON更新文档时,我能够更改/覆盖CreatedBy和CreatedDate字段的值。 这意味着,如果未提供字段,则结果值将保存为null,否则,它将为创建者和创建的字段保存新值。
我正在尝试使用Spring Data mongodb更新mongodb中嵌入文档中的数组字段。 我想在mongodb集合中更新/插入的文档结构如下所示。 可以有更多这样的文档基于每个类型的部门,如“销售”,“市场营销”等。 即使这样做有效,我也不确定在Spring Data MongoDB中实现相同的功能是否有类似的支持。 另外,我的另一个查询是,如果我想为多个部门添加/更新员工,比如“Accou