我有一个看起来像这样的集合:
{
_id: ObjectId("50a68673476427844b000001"),
other fields
}
Run Code Online (Sandbox Code Playgroud)
我想做一个范围查询来查找两个日期之间的记录.我知道我可以从mongo shell var中的ObjectId获取日期:
var aDate = ObjectId().getTimestamp()
Run Code Online (Sandbox Code Playgroud)
但是目前还没有一种方法(据我现在可以搞清楚)创建一个仅包含时间戳部分的ObjectId - 我认为我的理想解决方案是无功能的mongo shell代码将是:
var minDate = ObjectId(new Date("2012-11-10"));
var maxDate = ObjectId(new Date("2012-11-17"));
Run Code Online (Sandbox Code Playgroud)
使用minDate和MaxDate作为范围值.
有没有办法在SHELL中做到这一点 - 我对一些驱动程序产品不感兴趣.
我正在尝试启用Mongo DB身份验证的第3步.当我尝试通过Mongo shell创建一个完全按照方向指示的用户时,shell会报告:
TypeError:对象admin的属性"createUser"不是函数
我用--auth选项启动了mongod并切换到了admin数据库.一如既往,帮助赞赏.
我在mongo shell中运行以下查询:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
Run Code Online (Sandbox Code Playgroud)
它只是没有按预期返回(JSON)?
是否可以从mongo shell中将结果传递给寻呼机?
mysql cli等效于:
mysql> pager少
我正在编写一个需要在两个表之间进行$ lookup的查询,据我所知,对ForeignField拥有索引以便及时执行此连接至关重要。但是,即使在字段上添加了索引之后,查询仍然会回退到COLLSCAN。
db.users.aggregate([
{$lookup:{ from: "transactions", localField: '_id', foreignField: 'uid', as: 'transaction' }},
{ $match: { transaction: { "$size" : 0} } },
{ $count: "total"},
], { explain: true })
Run Code Online (Sandbox Code Playgroud)
返回:
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.users",
"indexFilterSet" : false,
"parsedQuery" : {
},
"winningPlan" : {
"stage" : "COLLSCAN",
"direction" : "forward"
},
"rejectedPlans" : [ ]
}
Run Code Online (Sandbox Code Playgroud)
如前所述,我确实在事务集合中索引了uid字段:
> db.transactions.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
}, …Run Code Online (Sandbox Code Playgroud) 我有js文件mongodb在我得到console.log调试表达式的地方运行:
use test;
db.city.find().snapshot().forEach(function(city){
var Pos = city.Pos;
if (Pos)
{
longLat = Pos.split(" ");
console.log("longLat"); // for debugging ----------------------------
console.log(longLat);
lon = longLat[0];
lat = longLat[1];
if (lon && lat)
{
lon = parseFloat(lon);
lat = parseFloat(lat);
longLat = [lon, lat];
city.longLat = longLat;
}
}
db.orgs.save(city);
})
Run Code Online (Sandbox Code Playgroud)
当我运行它...
mongo < /path/to/this/js/file.js
Run Code Online (Sandbox Code Playgroud)
...输出中出错:
ReferenceError: console is not defined
Run Code Online (Sandbox Code Playgroud)
有没有办法记录中间结果以进行调试?
我正在运行mongodb实例,它在我的服务器机器上运行auth模式.目前我使用shell scipt来判断是否有mongodb实例正在运行.如何检查mongodb是在auth模式还是非auth模式下运行.
我正在客户端中为 MongoDB shell 编写 JavaScript 代码。如何获取正在执行的脚本文件的路径?请注意,这不是 的值pwd()。例如,我正在/my_scripts/utils.js执行/my_path:
> mongodb --nodb /my_scripts/utils.js
Run Code Online (Sandbox Code Playgroud)
sopwd()返回,但是如何获取当前执行文件(即 )的/my_path完整路径(或 值的相对路径) ?pwd()/my_scripts/utils.js
如何为mongodb 2.4.1设置适当的授权。我的设置似乎无法正常工作。副本成员配置:
dbpath = /vol/data/mongodb/
# logfile
logpath = /var/log/mongodb/mongodb.log
logappend = true
# socket
bind_ip = 0.0.0.0
port = 27018
# replication
replSet = <%= hostname[14,4] %>
# authentication
keyFile = /etc/mongodb.pass
# turn off legacy privilege mode
setParameter = supportCompatibilityFormPrivilegeDocuments=false
setParameter = textSearchEnabled=false
# turn off authorization
auth = true
Run Code Online (Sandbox Code Playgroud)
添加用户授权后:
> use admin
> db.addUser( { user: "admin", pwd: "xxx", roles: [ "userAdminAnyDatabase", "readWriteAnyDatabase", "dbAdminAnyDatabase" ] } )
Run Code Online (Sandbox Code Playgroud)
我无法访问rs。*命令。
> use admin
> db.auth('admin','xxx')
1
> rs.status() …Run Code Online (Sandbox Code Playgroud) 我有一个 mongosh 脚本,应该同步执行。我可以在 mongosh 中使用 Promise 或 async/await 吗?看来我不行了 有没有办法确保事情不会乱序执行?
例如
(1) db.clients.find({}).forEach((client) => {
db.addresses.insertMany([
{ ....
}
(2) db.addresses.find({}).forEach...
Run Code Online (Sandbox Code Playgroud)
当 1 仍在循环时,2 由 mongosh 执行。有什么想法吗?