繁体   English   中英

如何使用 $pull 和 TypeORM 使用 Mngodb 删除 object insude 数组?

[英]How to use $pull with TypeORM to delete an object insude array using Mngodb?

我在 mongodb 中有一个带有模式的集合:

{ 
"_id" : "",
 "vins" : [ { "field" : "" } ], 
"xyz" : "", 
"password" : "", 
"username" : ""
 }

我想删除匹配特定条件的“vins”数组中的 object 。 通常,使用“$pull”操作符可以很容易地做到这一点。 但是我找不到任何关于如何使用 TypeORM 的信息。
(值得一提的是,我几乎没有使用 typeorm 的经验,而是在我的整个职业生涯中使用了 mongoose)。

当我尝试

this.repo.update({ "xyz" : <value>} ,{ $pull : { "fields" : { "field": <value> } } })

我收到一个错误

'{ $pull: { "vins": { "vin": any; 类型的参数 }; }; }' 不可分配给“DeepPartial”类型的参数。 Object 文字可能只指定已知属性,并且 '$pull' 不存在于类型 'DeepPartial'

我终于设法使它与:

let mongoRepository = getMongoRepository(Repo);  
let result =  await  mongoUserRepository.findOneAndUpdate({ "field1" : value} , {  $pull: {"fields" :{"field":  value}  }} );

看来我正在寻找的方法在 mongoRepository 中可用,但在 typeorm “Repository”中不可用。

看起来MongoRepository具有允许这样做的updateOneupdateMany方法。 例如,我可以使用updateOne进行编译和 function 测试。

https://github.com/typeorm/typeorm/blob/2bb0e398f922561f1cbb8ebbb19d20aa093e8bc2/src/repository/MongoRepository.ts#L356

示例用法:

  const user = new User();
  user.firstName = "Timber";
  user.lastName = "Saw";
  user.flags = ["typescript", "nodejs"];

  const repo = getMongoRepository(User);
  await repo.save(user);
  console.log("Saved");

  await repo.updateOne({ _id: user.id }, { $pull: { flags: { $in: ["typescript"] } } });
  console.log("Updated!");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM