{
"_id":ObjectId("92837261829"),
"num":12
}
{
"_id":ObjectId("d4372643229"),
"num":25
}
获取文档的mongodb语法是什么" num"以1开头。
注意" num"中的值是一个不是字符串的数字。所以我猜db.collectionName.find({" num":{$ regex:/ 1。* /}})或类似的东西可能无效。
语法的输出应为
{
"_id":ObjectId("92837261829"),
"num":12
}
答案 0 :(得分:1)
您实际上可以检查第一个字符的$substr
以查看它是否匹配:
db.collection.aggregate([
{ "$redact": {
"$cond": {
"if": { "$eq": [ { "$substr": [ "$num", 0, 1 ] }, "1" ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
])
逻辑条件发送到$redact
,$substrCP
使用"三元"从结果中将操作转移到$$KEEP
或$$PRUNE
文档。
来自MongoDB 3.4,应该替换为$substrBytes
或$substrBytes
,因为前一个运算符已被弃用,现在别名为$where
。
或者你可以用http://docs.ansible.com/ansible/lineinfile_module.html做同样的事情,虽然由于JavaScript评估有点慢:
db.collection.find(function() {
return this.num.toString().substr(0,1) === "1";
})
请注意,这两种方法都在进行计算,因此必须扫描整个集合才能获得结果。因此,在生产环境中,这不是一个实际的操作。
在生产中,最好将这样的东西存储为单独的属性,然后您可以直接查询它并利用和索引来加速搜索结果。