Articles of 集合

Node + Mongo:向集合中的数组添加logging

我正在写一个博客系统。 现在我正在处理post的评论。 以下是每个post的模式: { "topic": "Post Topic", "post": "<p>\r\n\tPost text</p>\r\n", "time_added": 1343167025, "author": "Ashley Brooks", "_id": { "$oid": "500f1a315759c73805000001" } } 现在,我想为这个post添加评论。 我想存储评论的最佳方式是: { "topic": "Post Topic", "post": "<p>\r\n\tPost text</p>\r\n", "time_added": 1343167025, "author": "Ashley Brooks", "_id": { "$oid": "500f1a315759c73805000001" }, "comments" : [ { "author":"James Brown", "comment":"My awesome comment" }, { "author":"Jimmy White", "comment":"And this […]

一个mongoosecollections会减慢另一个吗?

我正在运行一个网站,我希望用户能够上传和存储图像。 我意识到,build议使用像amazon s3这样的外部服务来存储图像,但是我现在不想为此付费。 我被告知的另一种select是为图像检索创build一个API。 但是,不出现mongoose允许同时进行多个数据库连接,所以最简单的方法就是为我的图像使用单独的集合。 我的问题是,将使用一个单独的图像集合仍然减慢访问我的其他集合? 理想情况下,我希望它是分开的,以便即使沉重的图像stream量将不会影响我的其他collections,但我不知道是否是这种情况… … – 有人能为我澄清这个吗? 谢谢

mongoose – 插入两个集合:一个是ID依赖于另一个

我有一个数组我想在我的数据库中插入: tracks = [new Track({name : "myname1"}), new Track({name : "myname2"})] Track.collection.insert(tracks, {}, function(err, tracks){ console.log('err', err); } 但即使数组中有2个对象,insert()方法也会抛出一个错误: [RangeError: Maximum call stack size exceeded] (“track”doc是创build的,但没有任何内容。) 编辑 Mongoose – RangeError:最大调用堆栈大小超过解决第一个问题,但没有解决我真正的问题: 当你从模型创build一个对象时,你可以得到_id,我用它来创build另一个对象。 但是不可能插入一个Mongoose对象的集合,因为解决的问题是: 你只能使用一个数组JSON对象 。 data.items.forEach(function(item,index){ tracks.push(new Track({name : "myname1"}) ); posts.push(new Post({trackId : track._id}) ); } Track.collection.insert(tracks, {}, function(err, tracks){ console.log('err', err); }

Express:查询是否存在文档

我正在使用mongo在Express中开发一个应用程序。 我必须检查集合中是否存在特定的文档。 我正在这样做: router.route('/').post(function (req, res, next) { var name = req.body.name; var dept = req.body.dept; var arr = mongoose.model('User').find({'name': name, 'dept': dept}); if(arr.length() > 0){ //do something } } mongoose.model('User').find({'pemail': email, 'password': password}); 实际上返回,因为当我运行的应用程序,它给了我这个错误: TypeError:undefined不是一个函数 任何帮助?

build立一个集合caching是一个好习惯吗?

我正在用MongoDB和Node.js一起使用插件node-mongodb-native 。 我遇到的一个问题是嵌套callback的数量。 我试图通过减less查询所需的代码来简化一些事情。 而不是这个… db.collection("test", function(err, collection) { collection.find(…).toArray(function(err, results) { // … }); }); …我正在考虑构build一个充当caching集合的对象,这样第一个callback就没有必要了。 我使用下面的代码来构build对象: var collections = {}; ["test", "foo"].forEach(function(name) { db.collection(name, function(err, coll) { collections[name] = coll; }); }); 有了它,我可以清理第一个代码片段: collections.test.find(…).toArray(function(err, results) { // … }); 我想知道这是否是一个好的做法。 它工作得很好,但我想获得一个集合的callback是有原因的。 像我现在所做的那样构build集合caching是否有意义?

MongoDB组查询在terminal中工作,在nodejs文件中抛出错误

我有一个查询,在terminal查询我的mongodb集合工作正常,但是在我想分组数据的函数内,我收到以下错误: // QUERY WORKS: /* > db.twitterhashtags.group({ key: {"text":true}, initial: {sum:0}, reduce: function(doc, prev) {prev.sum +=1}}); [ { "text" : "spnyc", "sum" : 1 }, { */ //RUNNING QUERY CAUSES THIS ERROR: // TypeError: undefined is not a function // at Collection.group.scope (/Users/propstm/Projects/nodeproject/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection.js:1341:16) //at g (events.js:185:14) 这是引发上述错误的代码行。 db.collection("twitterhashtags").group({ key: {"text":true}, initial: {sum:0}, reduce: function(doc, prev) […]

Node + mongo-native:如何查找和更新集合中的值?

我有用户帐户,按时间到期。 时间以毫秒为单位存储在MongoDB中。 用户由_id标识。 这是架构: { "_id": { "$oid": "506a1438be4f73c11c000002" }, "email": "admin", "password": "admin", "first_name": "admin", "last_name": "admin", "country": "USA", "group": "admin", "expires": 1349129272918 } 要为用户帐户添加+ N天,我使用find(),然后更新()(不知道为什么,但findAndUpdate无法获得以前的值): app.post('/users/add', function(req,res){ addDays(req.body.id, req.body.days, function(status){ res.send(200); }) }); function addDays(id, days, callback) { var obj_id = BSON.ObjectID.createFromHexString(id); db.collection("users", function(error, collection) { collection.find({_id: obj_id}, function(err, user) { var oldexp […]

NodeJS,TypeScript和typescript集合

我想从NodeJS中的typescript集合中使用Dictionary类: /// <reference path="../../../scripts/collections.ts" /> var collections = require('../../../scripts/collections'); export class AsyncProcessorCommand implements interfaces.IAsyncProcessorCommand { public static Type = 'RabbitMon.AsyncProcessorCommand:RabbitMon'; public GetType = () => 'RabbitMon.AsyncProcessorCommand:RabbitMon'; public ID: string; constructor(public Action: string, public Arguments?: collections.Dictionary<string, string>) { this.ID = uuid.v4(); this.Arguments = new collections.Dictionary<string, string>(); //I've also tried the following //this.Arguments = new collections.Dictionary<string, string>((key: […]

使用asynchronous库来组装来自数据库的所有标签

我正在使用sails.js创build一个标记系统,它与一个名为Post的实体具有多对多的关系。 我做关联的方式是使用数据库表来关联每个tagId和postId 。 每个post可以有多个标签。 在检索{tagId : 'tagId, postId: 'postId'}对象的数组后,我需要检索每个tagId的标签名称。 我使用async库,但标记名称(string)数组返回一个空的,从日志信息,我可以看到,返回发生在迭代器函数完成之前。 我的代码如下: var tagIdPostIds = [ {tagId : 'abcx', postId: 1}, {tagId : 'abce', postId: 1}, {tagId : 'abcd', postId: 1}, ]; if (tagIdPostIds) { var tagsArr = []; //container of tag names var findTagById = function(tagIdPostIdObj, cb) { var tagId = tagIdPostIdObj.tagId; Tag.findOneById(tagId, function (err, […]

db.collectionNames在Node.js中不起作用

我想检查一下在Node.js中是否存在一个集合。 我使用db.collectionNames获取数据库中的名称列表,但没有发生任何事情。 代码: connectDB(DBURL).then(function(db) { console.log('db connect ok'); db.collectionNames('test', function(err, collectionNames) { console.log('get collection names'); if(err) console.log(err); else console.log(collectionNames); }); }, function(err) { console.log(err); }); connectDB(DBURL)是一个promise对象,它工作的很好。 输出: app-0 try to connect db app-0 db connect ok 你可以看到collectionNames的函数没有任何输出。 我不知道为什么。 我可以通过db.getCollectionNames在Mongo shell中获取集合名称: > db.getCollectionNames() [ "system.indexes", "test" ]