我正在使用argparse,我正在尝试混合子命令和位置参数,并出现了以下问题.
这段代码运行正常:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser.add_argument('positional')
subparsers.add_parser('subpositional')
parser.parse_args('subpositional positional'.split())
Run Code Online (Sandbox Code Playgroud)
上面的代码将args解析为Namespace(positional='positional'),但是当我更改位置参数以使nargs ='?'时 因此:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser.add_argument('positional', nargs='?')
subparsers.add_parser('subpositional')
parser.parse_args('subpositional positional'.split())
Run Code Online (Sandbox Code Playgroud)
它出错了:
usage: [-h] {subpositional} ... [positional]
: error: unrecognized arguments: positional
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
是否可以将位置运算符'$'与深层嵌套文档数组上的查询结合使用?
考虑以下定义'user'的嵌套文档:
{
username: 'test',
kingdoms: [
{
buildings: [
{
type: 'castle'
},
{
type: 'treasury'
},
...
]
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
我们希望为特定用户返回"城堡",例如:
{
kingdoms: [{
buildings: [{
type: 'castle'
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
因为你不能两次使用$运算符(https://jira.mongodb.org/browse/server-831)我知道我也不能查询某个特定的王国,所以我正在尝试写一个查找语句第n个王国.
这在更新深度嵌套的子文档(Mongodb更新深层嵌套的子文档)时似乎有意义,但我在查找查询方面的成功较少.
我可以通过查询返回第一个王国的建筑物:
db.users.findOne(
{ username: 'test' },
{ kingdoms: {$slice: [0, 1]}, 'kingdom.buildings': 1 }
);
Run Code Online (Sandbox Code Playgroud)
但这会归还那个王国的所有建筑物.
按照位置运算符的单级示例,我正在尝试这样的查询:
db.users.findOne(
{ username: 'test', 'kingdoms.buildings.type': 'castle' },
{ kingdoms: {$slice: [n, 1]}, 'kingdom.buildings.$': 1 }
);
Run Code Online (Sandbox Code Playgroud)
以形式:
db.collection.find( { <array.field>: …Run Code Online (Sandbox Code Playgroud) 考虑这些数据
{
"_id" : ...,
"array" : [
{ "name" : "value1","flag" : true } ,
{ "name" : "value2","flag" : false }
]
}
Run Code Online (Sandbox Code Playgroud)
我想切换第二个数组元素(从false到true)
我知道我可以使用非常有用的$ position运算符更新特定元素,如下所示:
db.myCollection.update(
{'array.name':'value2'},
{
$set: {
'array.$.flag':true
}
},false,true);
Run Code Online (Sandbox Code Playgroud)
但有没有办法使用$ position运算符进行值设置?
比如这样?
db.myCollection.update(
{'array.name':'value2'},
{
$set: {
'array.$.flag':'!array.$.flag' //<--
}
},false,true);
Run Code Online (Sandbox Code Playgroud) 今天说是4月8日,我在bash中执行以下操作.
cd /tmp
mkdir hello
touch -d 2015-04-01 hello
Run Code Online (Sandbox Code Playgroud)
然后,假设我要删除/ tmp中超过一天的所有文件,但不删除目录,我执行此操作:
find /tmp -mtime +1 -delete -type f
Run Code Online (Sandbox Code Playgroud)
如果目录"hello"不是文件,为什么会删除?
谢谢!