mongodb Mongo如何根据数组中对象的动态属性查找所有文档?

huus2vyu  于 2023-03-29  发布在  Go
关注(0)|答案(1)|浏览(148)
documents in my sb:

{
{prop1: "abc", otherProp: "xxx",...},
{prop1: "x", otherProp: "xxx",...}
}
const arr = [{prop1: "abc", otherProp: "xxx",...},{prop1: "y", otherProp: "xxx",...}];

1.如何找到属性为prop1为“abc”的文档?2..所有prop1不为“abc”的文档?

await db.collection.find({prop1: "arr.$.prop1"})

不是正确的方法,但是我如何访问对象数组中的动态属性呢?

plicqrtu

plicqrtu1#

一种方法是在数组上循环并执行upsert操作。像这样:

for (let i = 0; i < arr.length; i++) {
   await db.collection.updateOne({prop1: arr[i].prop1}, {$set: arr[i]}, {upsert: true});
}

这将更新文档,如果它已经在那里,否则插入它。如果你不想更新文档,只插入新的,试试这个:

for (let i = 0; i < arr.length; i++) {
   const doc = await db.collection.findOne({prop1: arr[i].prop1});
   if (!!doc) {
      await db.collection.insertOne(arr[i]);
   }
}

如果您使用Mongoose,请使用Model.findOneModel.save

相关问题