如何在 mongo shell 中迭代查询
How to iterate queries in mongo shell
当然,这很简单。我想不通。在 Mongo shell 中,我有以下命令:
db.getCollection("CollectionName")
.findAndModify({query: {"Property.0.Element": {"$type" : 1}},
update: {$set: {"Property.0.Element":""}}
})
如果我多次 运行 此命令,最终它会 returns null 并且我知道我已经更改了所有我想更改的字段。但是如果我 运行:
for(j = 0; j < 50;j++) {
var loc = "Property."+j+".Element";
db.getCollection("ShelbyCoAssessorDeepStaging")
.findAndModify({query: {loc : {"$type" : 1}},
update: {$set: {loc:""}}
})
}
然后我返回了 null,但 none 的值实际上发生了变化。为什么是这样?注意:我在 studio3T 的 intellishell 中针对 3.6.6.
版的 atlas 集群 运行 进行此操作
您正在尝试对查询对象使用动态键。但是 JavaScript 在对象文字中不支持这种方法。请在 MongoDB shell 或 Studio 3T 的 IntelliShell 上考虑以下示例:
> var fieldName = "foo"
> var query = { fieldName: 1 }
> printjsononeline(query)
{ "fieldName" : 1 }
在这个小示例中,我们创建了一个变量,其中包含我们要在查询对象中设置的键的名称。但是 JavaScript 不期望变量作为对象文字中的键。 symbol直接作为key名,key是否带引号完全无所谓
如果您想在 JavaScript 中使用动态键名,您可以使用简单的括号表示法(或 "member index access"):
> var fieldName = "foo"
> var query = {}
> query[fieldName] = 1
1
> printjsononeline(query)
{ "foo" : 1 }
如果我们将此应用于您的示例,我们将在 MongoDB shell 或 Studio 3T IntelliShell 上得到以下代码 运行:
for(j = 0; j < 50;j++) {
var loc = "Property."+j+".Element";
var theQuery = {};
theQuery[loc] = {"$type" : 1};
var theUpdate = {$set: {}};
theUpdate["$set"][loc] = "";
db.getCollection("ShelbyCoAssessorDeepStaging")
.findAndModify({query: theQuery,
update: theUpdate
})
}
当然,这很简单。我想不通。在 Mongo shell 中,我有以下命令:
db.getCollection("CollectionName")
.findAndModify({query: {"Property.0.Element": {"$type" : 1}},
update: {$set: {"Property.0.Element":""}}
})
如果我多次 运行 此命令,最终它会 returns null 并且我知道我已经更改了所有我想更改的字段。但是如果我 运行:
for(j = 0; j < 50;j++) {
var loc = "Property."+j+".Element";
db.getCollection("ShelbyCoAssessorDeepStaging")
.findAndModify({query: {loc : {"$type" : 1}},
update: {$set: {loc:""}}
})
}
然后我返回了 null,但 none 的值实际上发生了变化。为什么是这样?注意:我在 studio3T 的 intellishell 中针对 3.6.6.
版的 atlas 集群 运行 进行此操作您正在尝试对查询对象使用动态键。但是 JavaScript 在对象文字中不支持这种方法。请在 MongoDB shell 或 Studio 3T 的 IntelliShell 上考虑以下示例:
> var fieldName = "foo"
> var query = { fieldName: 1 }
> printjsononeline(query)
{ "fieldName" : 1 }
在这个小示例中,我们创建了一个变量,其中包含我们要在查询对象中设置的键的名称。但是 JavaScript 不期望变量作为对象文字中的键。 symbol直接作为key名,key是否带引号完全无所谓
如果您想在 JavaScript 中使用动态键名,您可以使用简单的括号表示法(或 "member index access"):
> var fieldName = "foo"
> var query = {}
> query[fieldName] = 1
1
> printjsononeline(query)
{ "foo" : 1 }
如果我们将此应用于您的示例,我们将在 MongoDB shell 或 Studio 3T IntelliShell 上得到以下代码 运行:
for(j = 0; j < 50;j++) {
var loc = "Property."+j+".Element";
var theQuery = {};
theQuery[loc] = {"$type" : 1};
var theUpdate = {$set: {}};
theUpdate["$set"][loc] = "";
db.getCollection("ShelbyCoAssessorDeepStaging")
.findAndModify({query: theQuery,
update: theUpdate
})
}