如果我在文档中有这样的结构
...
updatedAt: 2021-01-17T16:44:28.824+00:00
vid: (Array)
0: (Array)
0: "adfsdfasfd"
1: "this is some sample text"
2: "https://example.com"
1: (Array)
0: "gfjghjhjgh"
1: "this is another sample text"
2: "https://example2.com"
...
例如,我如何更新数组 vid[0][0] 知道“adfsdfasfd”?
为了获得整个 vid[0][0] 数组,我正在使用这个:
const foundVid = await db.collection('users').find({vid: {$elemMatch: {$elemMatch: {$in: ["adfsdfasfd"]}}}}).project({"vid.$": 1, "_id": 0 }).toArray()
其中console.log(foundVid):
{
vid: [
[
"adfsdfasfd"
"this is some sample text"
"https://example.com"
]
]
}
然后我尝试了 $set 和 $addToSet ,例如:
let update = {
vid: [
[foundVid[0].vid[0][0], foundVid[0].vid[0][1], foundVid[0].vid[0][2], views, likes, date]
]
}
await db.collection('users').updateOne(
{
vid: {
$elemMatch: {
$elemMatch: {
$in: [
"adfsdfasfd"
]
}
}
}
},
{ $addToSet : update }
)
但它似乎不起作用..
编辑:我想要完成的是通过知道它的第一个字符串(这是一个 id)来更新一个数组元素,所以在如上所述更新我的 vid[0][0] 之后它应该看起来像:
...
updatedAt: 2021-01-17T16:44:28.824+00:00
vid: (Array)
0: (Array)
0: "adfsdfasfd"
1: "this is some sample text"
2: "https://example.com"
3: 1000
4: 100
5: <a date here>
1: (Array)
0: "gfjghjhjgh"
1: "this is another sample text"
2: "https://example2.com"
...
编辑 2:对不起,我认为“更新”一词是隐含的,而不是更改数组,我需要更新它,就好像它是一个 $set。let update = ...
这就是为什么我要使用前三个当前值 + 更新的变量重新创建数组 ( ) views, likes, date
。
$set 的问题在于它似乎更新了整个 vid 数组,其中只有这个数组导致:
...
updatedAt: 2021-01-17T16:44:28.824+00:00
vid: [
0: [
0: "adfsdfasfd"
1: "this is some sample text"
2: "https://example.com"
3: 1000
4: 100
5: <a date here>
]
]
...