- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
描述
MongoDB 的 updateMany
与 $rename
一起使用时,方法不会更新任何文档在某些领域。
示例
我尝试重命名字段blog.blog_ttile
和blog.blog_cotnet
。我检查了拼写错误,没有。
Example model:
User: {
name,
email,
blog: {
blog_ttile,
blog_cotnet
}
}
代码:
const mongoose = require('mongoose');
const User = mongoose.model('User');
const nameChanges = {
"blog.blog_ttile": 'blog.title',
'blog.blog_cotnet': 'blog.content',
};
async function performNameChanges() {
try {
const updatedDocuments = await User.updateMany({}, { $rename: nameChanges });
console.log({ updatedDocuments });
} catch(err) {
console.error(err);
}
}
返回:
{ updatedDocuments: { ok: 0, n: 0, nModified: 0 } }
其他详细信息
某些字段已被正确识别。比方说email
在上面的例子中。但是,当我尝试更新更新后的名称时,它不再起作用。有趣的是,它仍然检测到原始名称。
示例:
重命名 email
至personal_email
作品。重命名personal_email
至email
之后不会并返回 { ok: 0, n: 0, nModified: 0 }
。在 email
上调用重命名第二次返回{ n: <total_records>, nModified: 0, ok: 1 }
虽然没有文件有email
不再了`。
这可能是什么原因造成的?
注意:这个问题适用于没有 Mongoose 的 MongoDB db.getCollection("User").updateMany
而不是User.updateMany
最佳答案
我尝试在 MongoDB 中做同样的事情。它按预期工作。在你的例子中,我怀疑 Mongoose 模式是造成这种奇怪行为的原因。 Mongoose Schema 必须具有您要重命名的字段。如果该字段不存在,则返回 nModified 0。架构需要同时具有旧名称和新名称。旧的允许迁移,新的允许代码中的新逻辑。
您的返回结果是:
{ updatedDocuments: { ok: 0, n: 0, nModified: 0 } }
这怎么可能? n=0?对于查询 {}。仅当您的集合中没有元素时才有可能。 n 表示匹配计数,它必须等于您集合中的记录总数。
Renaming email to personal_email works
在第一次更新之前,您的架构很好。但是重命名(第一次更新)后,您应该将架构更新为:
User: {
name,
personal_email,
blog: {
blog_tile,
blog_contnet
}
}
在运行第二次更新之前(重命名回电子邮件)。
关于node.js - Mongo 的 updateMany 重命名不会更新某些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212010/
使用 .updateMany(filter, update, option) 时。如何为每个文档设置动态过滤器字段? 我有一系列这样的文件: [ { time: 1,
在我的应用程序中,我有一个名为 Blog 的集合我每 24 小时运行一次这个查询 await Blog.updateMany({}, [ { $set: { v
我有代表用户的文档,其中的入职数据存储为嵌套对象: { "_id" : ObjectId("5c7eb0132e6f793bcc7f4bf7"), "userName" : "samp
我有一个大型数据库,其中存在各种不一致之处。我想澄清的项目之一是根据人口更改国家/地区状态。 数据样本是: { "_id" : "D", "name" : "Deutschland", "pop" :
期望的行为 更新多个文档中的属性值后,访问每个更新文档的更新属性值。 (就上下文而言,我会增加多个用户的通知计数,然后通过 socket.io 将每个更新后的值发送回相应的用户(如果他们已登录)) 我
我有一个最新的 mongodb 3.2,并且有许多具有时间戳的项目的集合。 需要将毫秒转换为 Date 对象,现在我使用这个函数: db.myColl.find().forEach(function
记录示例: {name: anUserInfo.name, userid: anUserInfo.userid, deviceToken: anUserInfo.deviceToken, email:
假设我们有代码: await Employees.updateMany( { InsertDate: { $gte: _yesterday
我正在尝试在 MongoCollection 中插入/更新许多记录。我有一份需要更新的文档列表。 List Documents; 该列表包含一些要插入的新记录以及其他需要更新的现有记录。我正在研究方法
有什么方法可以让我在updateMany 中使用当前索引或文档编号或游标ID方法? 例如: db.collection("users").updateMany({}, { $set: {"uname"
db.movieDetails.updateMany({ "tomato.consensus": null, "imdb.votes":{$lt:10000}, "year":
我想知道它是否更快(导入)使用 updateone或 updatemany使用批量写入。我使用 pymongo 外观将数据导入集合的代码是这样的: for file in sorted_files:
在我的 MongoDB/Node 后端,我试图编写一个函数来接收用户输入的 ID,然后更新一个名为 subscription.subscriptionEnd 的字段,该字段与每个传入的 ID 相匹配。
Node API,我们有 Mongo 配置文件集合,每个配置文件都有 subscription_plan ,它代表他们为使用应用程序付费的剩余天数。现在,我在后端工作,这应该将所有配置文件的 subs
描述 MongoDB 的 updateMany与 $rename 一起使用时,方法不会更新任何文档在某些领域。 示例 我尝试重命名字段blog.blog_ttile和blog.blog_cotnet
从 mongo > documentDB 迁移后,我尝试使用 substr 执行更新,但是我收到一个奇怪的错误。 以下使用 pymongo 在 Mongo 4.0 上运行: await db[
AFAIK,这两个操作都可以更新多个文档。如果是这样,两者之间有什么区别? 最佳答案 只是引用 API docs这里 bulkWrite Sends multiple insertOne, updat
在我的 MongoDB/Node 后端中,我有一个函数,可以根据传入的订阅 _ids 更新标题为 subscriptionEnd 的字段上的日期。它看起来像这样: try { db
我正在尝试更新 MongoDB 数据库中的所有记录。我想根据日期(updatedAt)按升序对记录进行排序。然后根据其当前状态(currentStatus)更新有限数量的记录。 这些字段是这样的: 我
我在尝试验证 Model::updateMany(或 update + mutli:true)请求内修改的文档架构时遇到了 Mongoose 架构验证问题。我有以下架构: var Business
我是一名优秀的程序员,十分优秀!