mongodb - 我们如何在 MongoDB shell 中更新数组对象值
问题描述
我想更新嵌套数组对象中包含 ObjectId 的所有 MongoDB 文档
我的文档是:
{
"_id" : ObjectId("5a61a6bdae8bdc26685f8c27"),
"variant_count" : 1,
"salts" : [
{
"name" : "Cetirizine",
"classification" : "HD",
"dosage" : 0.0,
"is_cold_storage" : false,
"id" : ObjectId("5a61a292ae8bdc26685f2a91")
}]
"drug_category" : "DRUGS",
"name" : "Adicold Tab",
}
我想将所有 salts.id 更新为字符串,
例如。
{
"_id" : ObjectId("5a61a6bdae8bdc26685f8c27"),
"variant_count" : 1,
"salts" : [
{
"name" : "Cetirizine",
"classification" : "HD",
"dosage" : 0.0,
"is_cold_storage" : false,
"id" : "5a61a292ae8bdc26685f2a91"
}]
"drug_category" : "DRUGS",
"name" : "Adicold Tab",
}
解决方案
这对我有用:
db.product.find({"salts.id" : {$type : 7}}).forEach(
function(doc) {
var salts = doc.salts;
var newSalts = [];
if (Array.isArray(salts) && salts.length > 0) {
for (i = 0; i < salts.length; i++) {
salt = salts[i];
if (salt['id'] != null && typeof salt['id'] == 'object') {
salt['id'] = salt['id'].str
newSalts.push(salt)
} else {
newSalts.push(salt)
}
}
db.product.update( { _id: doc._id }, { $set: { salts: newSalts } }
);
i = i + 1;
}
}
);
推荐阅读
- java - Tomcat 和我的 JSP/Servlet 应用程序之间的区别?
- swift - Swift字符串到缓冲区中的字节
- haskell - 确定因子指数
- c - 生成特定 pkcs8 格式的私钥(自定义 CNG)
- react-native - 如何在给定的adjustsFontSizeToFit设置为true的情况下将默认字体大小添加到本机反应中?
- html - 向下滚动时,内容显示在固定 div 上方
- google-cloud-platform - 作为远程服务器连接到 Google Compute Engine 实例时出现“错误消息无效密钥”WebStorm
- .htaccess - 如何为 1 个站点创建 2 个域(无重定向)
- c# - 如何在 RazorEngine 中执行部分视图
- ldap - 如何使用 ADFS 使用 LDAP 帐户登录 Windows