我的架构:
import pkg from "mongoose";
const { Schema, model, models } = pkg;
const child = new Schema({ name: String, studentid: Number});
const schema = new Schema({ name: String, age: Number, children: [child] });
const Test = model("Test", schema)
export default Test;
数据样本:
我的update函数,我希望更新数组中基于age
和studentid
的整个对象:
import { connectToDB } from "./utils/database.js";
import Test from "./models/test.js";
async function updateData() {
await connectToDB();
const res = Test.updateMany(
{
age: 34,
name: "name2",
},
{
$set: {
"children.$[element]": {
name: "updatedname",
studentid: 123456789,
},
},
},
{
arrayFilters: [
{
element: {
name: "childr344en1",
studentid: 137,
},
},
],
},
{upsert: true}
);
console.log(res)
}
await updateData();
执行更新函数后,数据没有更新。我能问问为什么吗?我哪里做错了?
1条答案
按热度按时间qeeaahzv1#
由于
child
是嵌入在children
字段中的subdocuments。子文档将有一个_id
字段。例如,子文档是但是
arrayFilters
是[{ element: { name: 'children1', studentid: 13 }}]
,它将不匹配子文档。这就是为什么arrayFilters
不工作。您可以使用两个字段匹配子文档:
element.name
和element.studentid
,如果您不关心子文档的_id
。或者使用整个子文档,如:
例如
调试日志: