【问题标题】:mongoDB updateOne not updating a recordmongoDB updateOne 不更新记录
【发布时间】:2016-10-04 05:40:27
【问题描述】:

我正在尝试使用 updateOne 更新 mongoDB 中的记录,未更新的记录在数组中,并且所有字段都在更新,除了 country 的一个字段,我尝试使用 MongoChef 更新它(MongoDB for linux 的 GUI),但它也不起作用,如果我在 GUI 中使用 Edit 更新文档,那么该记录就可以在此之后更新。

我在 MongoChef 中尝试过以下查询

db.institutions.updateOne({
    "campus": { "$elemMatch": { "_id": ObjectId("578500ef87e4c326183e520e")} },
    "_id": ObjectId("57f25706762c06cb7d9422fc") 
    },
    {
    "$set" : { "campus.$.country" : "SS1"
    }
});

只有国家/地区字段不更新如果我更新任何其他字段,它工作正常。

文档结构列在下面

{ 
    "_id" : ObjectId("57f26824762c06cb7d982e37"), 
    "campus" : [
        {
            "_id" : ObjectId("578500ee87e4c326183e5201"), 
            "country" : "GB", 
            "coreId" : NumberInt(1), 
            "city" : "Norwich", 
        }
    ]
}

提前感谢任何帮助

【问题讨论】:

  • 您可以给我们看一下您查询db.institutions.findOne({ "_id": ObjectId("57f25706762c06cb7d9422fc") })时得到的文件吗?
  • @chridam 我的查找查询是 db.institutions.find({ "campus.country" : "SS1", "_id" : ObjectId("57f26824762c06cb7d982e37") }, { "campus": true } ); {“_id”:ObjectId(“57f26824762c06cb7d982e37”),“campus”:[{“_id”:ObjectId(“578500ee87e4c326183e5201”),“country”:“GB”,“coreId”:NumberInt(14677),“city”: “诺里奇”} ] }
  • 但这与更新中使用{ "_id": ObjectId("57f25706762c06cb7d9422fc") }查询文档的查询完全不同
  • 再次导入db时变了,id没有问题了

标签: mongodb mongodb-query mongodb-php


【解决方案1】:

试试这个查询

db.institutions.updateOne(
    {
      "campus._id": ObjectId("578500ef87e4c326183e520e"),
      "_id": ObjectId("57f25706762c06cb7d9422fc") 
    },
    {
      "$set" : { "campus.$.country" : "SS1"}
    }
);

注意:如果使用 mongodb 驱动程序或 mongoose,则无需使用 ObjectId(""),只需使用 "578500ef87e4c326183e520e"

【讨论】:

  • 你在哪里运行这个查询意味着 mongo shell 或任何东西?
  • 我正在从项目以及 MongoChef(mongodb 的 GUI)中运行此查询
  • 供您的项目使用,例如"_id": "57f25706762c06cb7d9422fc"
猜你喜欢
  • 2020-08-29
  • 2017-12-14
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 2022-12-22
相关资源
最近更新 更多