发布网友 发布时间:2022-05-01 19:41
共6个回答
懂视网 时间:2022-05-02 07:39
~$ mongod
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] MongoDB starting : pid=26124 port=27017 dbpath=/data/db 64-bit host=jonny-PC
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] db version v3.2.11
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] git version: 009580ad490190ba33d1c6253ebd8d91808923e4
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2k 26 Jan 2017
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] allocator: tcmalloc
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] modules: none
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] build environment:
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] distarch: x86_64
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] target_arch: x86_64
2017-07-13T19:24:32.101+0000 I CONTROL [initandlisten] options: {}
2017-07-13T19:24:32.131+0000 E NETWORK [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
2017-07-13T19:24:32.131+0000 E NETWORK [initandlisten] addr already in use
2017-07-13T19:24:32.131+0000 E STORAGE [initandlisten] Failed to set up sockets during startup.
2017-07-13T19:24:32.131+0000 I CONTROL [initandlisten] dbexit: rc: 48
mongo 是客户端
~$ mongo
MongoDB shell version: 3.2.11
connecting to: test
>
直接连上了本地的服务器。
使用数据库和集合前不用建立,执行插入数据时会自动建立
这一点和关系型数据库不同。用之前必须要先创建 数据库和表。否则不行,但是mongodb不一样,用之前不需要创建。
比如我们要使用test数据库
MongoDB shell version: 3.2.11
connecting to: test
> use test
switched to db test
>
提示已经切换到test数据库
再比如我们要用一个stu数据库,其实之前没有,但是直接use stu
> use stu
switched to db stu
只有当我们向这个数据库里插入数据,这个数据库才会真正建立
比如我们现在先 use test 切换到 test数据库
然后插入一条数据:
集合是blogg
> use test
switched to db test
> db.blogg.insert({‘id‘:1,‘title‘:‘myblog‘})
WriteResult({ "nInserted" : 1 })
>
WriteResult,这两个键值对 就插入成功了。
也可以这样,预先定义你要插入的内容
> d = {‘id‘:2,‘title‘:‘yourblog‘}
{ "id" : 2, "title" : "yourblog" }
> db.blogg.insert(d)
WriteResult({ "nInserted" : 1 })
我们查询一下
多插2条,查询:
> db.blogg.insert({‘id‘:2,‘title‘:‘myblog2‘})
WriteResult({ "nInserted" : 1 })
> db.blogg.insert({‘id‘:3,‘title‘:‘myblog3‘})
WriteResult({ "nInserted" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
注意这里O是大写
> db.blogg.findOne()
{
"_id" : ObjectId("5967cc37f9e6f46246252b79"),
"id" : 1,
"title" : "myblog"
}
比如我只要id为2的
> db.blogg.findOne({‘id‘:2})
{
"_id" : ObjectId("5967cc9bf9e6f46246252b7a"),
"id" : 2,
"title" : "myblog2"
}
> db.blogg.insert({‘id‘:2,‘title‘:‘myblog2‘})
WriteResult({ "nInserted" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
> db.blogg.find({‘id‘:2})
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
这里的 "_id "是mongodb 自己创建的。每个文档的id不一样
比如我们 增加或修改指定键值对
修改 id 为1 title 从myblog改成myblog1
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
> db.blogg.update({‘id‘:1},{‘$set‘:{‘title‘:‘myblog1‘}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog1" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
若没找到,则新建 键值对:
比如 id为1的 再插入一条 titile-2 ,myblog1-2
> db.blogg.update({‘id‘:1},{‘$set‘:{‘title-2‘:‘myblog1-2‘}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find({‘id‘:1})
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog1", "title-2" : "myblog1-2" }
>
> db.blogg.update({‘id‘:1},{‘$unset‘:{‘title-2‘:‘myblog1-2‘}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find({‘id‘:1})
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : 1, "title" : "myblog1" }
>
比如修改id 的值,增加可以为负数 比如 -2
> db.blogg.update({‘id‘:1},{‘$inc‘:{‘id‘:-2}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1" }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
>
见到了之后,操作后变成了id -1
比如修改id 为 -1 的 记录,发现没有 size 则新建了。
> db.blogg.update({‘id‘:-1},{‘$set‘:{‘size‘:10}},true)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blogg.find({‘id‘:-1})
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" : 10 }
>
比如三个id为2的文档,匹配的3个都被新增了 size 为7 的键值对。
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" : 10 }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2" }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog" }
> db.blogg.update({‘id‘:2},{‘$set‘:{‘size‘:7}},false,true)
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" : 10 }
{ "_id" : ObjectId("5967cc9bf9e6f46246252b7a"), "id" : 2, "title" : "myblog2", "size" : 7 }
{ "_id" : ObjectId("5967cca0f9e6f46246252b7b"), "id" : 3, "title" : "myblog3" }
{ "_id" : ObjectId("5967cd30f9e6f46246252b7c"), "id" : 2, "title" : "myblog2", "size" : 7 }
{ "_id" : ObjectId("5967cdc4f9e6f46246252b7d"), "id" : 2, "title" : "yourblog", "size" : 7 }
>
> db.blogg.find()
{ "_id" : ObjectId("5967cc37f9e6f46246252b79"), "id" : -1, "title" : "myblog1", "size" :
var cpro_id = "u6292429";
热心网友
时间:2022-05-02 04:47
1.技术架构/实现方式
比如设计一个网站类的产品是使用什么编程语言开发的php,jsp或者Python。确定了编程语言以后你要知道整个产品项目中使用了什么开发框架,是团队自己研发的框架,还是使用市面上比较流行的框架。其次是数据库的选择,根据你们的业务需求是使用mysql这种关系型数据库还是mongodb这类非关系型数据库,最后就是服务器,服务器一般关心的问题就是稳定性,安全性,还有负载了。
根据不同需求选择服务器,
使用什么样的服务器?自己管理的,还是云。如果是云的话还要了解一些云服务和产品的内容,比如RDS,负载均衡,内容分发等等。
使用什么操作系统是window还是linux?Linux的话一般还分Ubuntu和redhat两个派系。
服务器的运行环境是怎样的?使用怎样的代理nginx,Apache还是tomcat或者为了实现高负载混合使用它们还是要自己用node来写一个更好更适用的。还要注意是否有其他插件需要支持。
如果是桌面级应用或者是手机APP这样的产品需求的东西还不一样,你还要考虑跨平台性以及其他细节问题。上述例子主要是网站产品主要依靠浏览器,平台兼容的考虑少一些。
2.技术特性
技术的生命周期:作为产品经理的你已经知道了产品是有生命周期的,那么其实我们生产产品使用的技术也是有生命周期的。假如项目周期比较长,比如10年吧,技术生命周期一般就2~3年,服务器操作系统生命周期会更长一些,,如果这部分能考虑到能节省很多重构成本。可是关键问题是这个问题本身就不太现实,我们很难预测2~3年以后我们的产品的样子。
技术的优缺点:作为PM你不用了解具体的实现方式,关键在于你要知道不同技术架构有什么优缺点,适合做什么事情。比如mysql和mongodb的区别,php和jsp的区别,它们的开发效率和健壮性怎么样,是不是符合我现阶段产品开发的需求。项目不大其实没区别,项目大的话就很明显了。
3.技术成本
不管怎么说作为PM掌控产品全局你要知道整个项目的技术开发成本是怎样的。其实都是项目管理里面的内容这里就不多说了,值得提的是程序员是个喜欢创造的工种,如果你只是设计好了让他们照着设计做他们会玩的很没乐趣的。要让他们也参与其中你会发现你的项目会比你想象中的进展要好。亲测,上个项目,我的开发团队就为客户提供了超出合同范围的各种各样的功能……重要的是这部分开发人员是愿意付出不计较成本的。(丫的,你们搞那么多功能就不怕有BUG客户再让咱们改吗????)
4.了解设计模式
其实才是整个业务架构里比较重要的东西,不过我现在理解的也不深刻,只能建议了。
一般你要先了解面向对象编程是怎么回事。
然后了解一些,单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,这类的设计模式。了解以后对你认识程序员的工作有所理解,最少忽悠不了你,你知道他们设计一个业务逻辑的流程是怎么样子的。这样就能做到心中有数了。
转自互联网的一些事
热心网友
时间:2022-05-02 06:05
产品经理没有必要对代码有特别深入的了解。
所谓产品,面对的是用户,用户体验永远是第一位的!
要从用户的角度,而不是工程师的角度理解业务逻辑。如果从用户逻辑讲的通,而技术上难以实现,那就需要有专业的架构师从技术上把关,而不是把要求产品经理都是架构师。当然额外有这样的能力更好,但不是必须的。
罗永浩可以说是比较好的产品经理,可能压根就不懂代码。但对于大部分产品经理来说,懂技术是与工程师顺利沟通的基础。刚才那个1888回答的挺好。
热心网友
时间:2022-05-02 07:39
产品经理当然要懂技术,不能因为不需要敲代码就不去了解技术,
所以产品经理的懂技术需要技巧:
1、先知道你的产品需要哪些技术
2、弄清楚几种技术之间的关系
3、了解每种技术的基本逻辑
4、遇到不懂得问题积极和技术工程师探讨,不要不懂装懂
5、先从产品逻辑理解技术,然后用技术逻辑进行反推
产品经理也要忌讳对技术的深入钻研,因为那样的话容易导致从技术工程师的角度出发,产品经理也很吃亏往往就是什么都懂什么都不精,但是这也是产品经理的特色。
热心网友
时间:2022-05-02 09:31
我认为产品经理需要懂一些交互设计,或是懂一些UI,至少在界面上可以分得出哪里好用或不好用,但同时我也认为是产品经理的悲剧,因为把一个产品经理身上维系了太多东西,这样看来,什么都懂的产品经理显然是一个非常无敌的人:产品经理要懂产品规划、产品的需要分析、要听用户的声音、要分优先级开发功能、要懂设计、要懂交互、要懂开发(Google的要求)、要会分析数据、还要负责协调团队等等。这样的人有,但好像真的不多。
在一个领域上做到一个点就非常的不容易,而对产品经理的要求可能仅能做到浅尝辄止就可以了。总之,在我看起来,国内的产品经理更像是传达老板的意见、协调项目各方角色的一个中间人。但这么讲或许是悲观主义的看法。
热心网友
时间:2022-05-02 11:39
肯定要很熟悉啊