Tag: mongodb

如何强制for循环等待callback完成在nodejs?

entry.find(function(err,user){ for(var i=0;i<user.length;i++){ if(user[i].tablenumber==-1){ assigntable(user[i]); } } }); 所以我在这里要做的是在调用asynchronousassigntable函数之前等待每个for循环完成。 Assigntable是对数据库进行更改的callback。 我现在的问题是,因为asscomntable的callback是在for循环完成后调用的,所有的用户都会被分配到表1中。但是我想要的是:将第一个分配给表1 – >在下一个循环中分配表1被分配 – >用户2被分配到表2等等。 我怎么做? 编辑:Assgintable是一个recursion调用,在callback中编辑数据库。 更新将基于从前一个循环产生的数据库的结果,但我没有在这里相关。 function assigntable(user,tableindex){ console.log("in recursion with tableindex"+tableindex); if(tableindex==3) return; console.log(user.date+user.time+tableindex); entry.find({ $and: [ { "tablenumber": tableindex}, { "date": user.date }, {"time":user.time} ] },function(err, result) { if(result.length==0){ console.log(result+"result is "); entry.update({"_id":user._id},{"tablenumber":tableindex},function(err, numberAffected) { if(!numberAffected){ } else { console.log("entryupdated with […]

Node.js,mongodb和过滤的查询

我正在使用mongodb的本地API,并试图查询我的集合上的数据。 这是我的过滤对象: { email: 'admin@email.it', login: { '$exists': true } } 这是它应该find的一个文件: { "_id": "5829cd89a48a7813f0cc7429", "timestamp": "2016-11-14T14:43:18.705Z", "login": { "clientIPaddr": "::1", "clientProxy": "none" }, "userData": { "sessdata": { "sessionID": "CRTZaqpaUs-ep0J6rvYMBlQTdDakGwle", "email": "admin@email.it", "token": "3PlfQBVBoftlIpl-FizeCW5TbYMgcYTl4ZPTkHMVyxqv-TldWb_6U3eusJ27gtI64v7EqjT-KPlUUwkJK7hPnQ" } } } 但查询不会返回任何东西! 为什么?

根据mongo db中第一个表的结果从第二个表中加载数据

我正在尝试加载并显示来自mongo db的一些信息。 我的网站在node.js / express上运行。 我有两个表,第一个是调色板,我加载和显示所有的,而且工作得很好。 但对于每个调色板,我有一个例子列表。 我想遍历每个调色板,并获取该调色板的所有示例。 我肯定是做错了,我想这是因为find()方法是asynchronous的,所以我的数据发送之前,它拉额外的数据。 但是我不能把render函数放在callback中,因为它是多次运行的。 在PHP中,我曾经能够从另一个表中获取数据,并将其连接到第一个基于公共列的数据,但是我不确定如何在此处执行此操作,这就是为什么我尝试使用循环。 /* GET palette database main page. */ router.get('/', function(req, res, next) { console.log('rendering test page'); var Palette = require('../models/paletteDatabase'); //load all palettes Palette.find({}, function(err, palettes) { if (err) return next(err); var PaletteExamples = require('../models/paletteExamples'); for (var i = 0; i < palettes.length; i++) { […]

在Mongoose中发出多个请求

我试图从MongoDB数据库与mongoose的其他select到另一个selectredirect到Emberjs前端。 如果上面的文本不清楚,请查看数据库的模式: // I already get the exam content given an id Exam:{ … collections:[{ question: Object(Id) }] … } 在问题模式中是: // I want to get content of this giving an id question:{ … questions: String, // I want to get this given an Id exam value: Number // and this … } 我试图让它获取集合的对象id,然后做一个提取每个问题,并将返回的值保存到一个jsonvariables,如下所示: Test.findById(id, […]

Mongoose从多个可能的集合中填充ObjectID

我有一个像这样的mongoose模型 var LogSchema = new Schema({ item: { type: ObjectId, ref: 'article', index:true, }, }); 但是“item”可以从多个集合中引用。 有没有可能做这样的事情? var LogSchema = new Schema({ item: { type: ObjectId, ref: ['article','image'], index:true, }, }); 这个想法是“物品”可以是来自“物品”集合或“图像”集合的文件。 这是可能的还是我需要手动填充?

Async循环与mongodb nodejs

我在MongoDb有2个集合: 用户和图像 用户是这样的: { "_id": ObjectID("58299fc14705d47ff852f8ae"), "mail": "Qwerty1@test.test", "username": "Qwerty1", "token": "g8m7h0phrvhp774cw0xh9qkt9rhu062r2b3gigm0t1o22zkt9", …, "images": [ ObjectID("582c547bb7c5cc391e5a1793"), ObjectID("582c54ecb7c5cc391e5a1794") ] } 图像就像: { "_id": ObjectID("582c5394b522cb37d701dbe3"), "user": "g8m7h0phrvhp774cw0xh9qkt9rhu06 "image": base64 encoded } 我在用户find这个用户的图像的id,我想填充一个数组(b64Images)与查找请求图像收集。 db.collection("users").find({$or : [{ username: req.params.username }, {token : req.params.username}]}).toArray(function (err, result) { if(result.length){ var b64Images = []; async.each(result[0].images, function(item, callback){ db.collection("images").find({_id : item}).toArray(function (err, resulta) […]

如何使用Express和MongoDB将json从nodejs服务器发送到客户端js文件

我是Nodejs和Express的新手,想从mongoDB中search一些结果,并在客户端浏览器上显示,我可以从mongoDB查询中find值,但是不能发送给客户端js文件,它说没有定义doc,帮助将不胜感激。 ***app.js(Server)*** var bodyParser = require("body-parser"); var express = require("express"); var app = express(); var port = "8001"; var mongo= require('mongodb'); var mongoClient=mongo.MongoClient; app.use(bodyParser.json()); app.use(express.static('public')); app.get('/home', function(req, res) { res.sendFile(__dirname + "/public/views/index.html"); }); app.listen(port, function() { console.log("Server running at:" + port); }) app.post("/response", function(req, res) { var t = req.body; mongoClient.connect("mongodb://localhost:27017/query", function(err,db){ cursor =db.collection('response').find({"name1":t.text},{"name2":1, "_id":0}); […]

mongoose关系devise

我最近开始在一个Node.js应用程序中使用Mongoose和Express.js,我有一个正确的方式来devise我的模式的问题。 我有几个有一些关系的模式,即位置模式有一个对象数组(它不是在这个上下文中的JS对象),而对象模式有它的位置属性。 我已经知道Mongoose中的关系是通过使用人口来解决的,但是当我实现这个方法的时候,我注意到我必须input很多重复的代码,也就是每当我想创build一个新的对象的时候,我也必须更新Location的数组对象,然后将该位置分配给该对象的属性。 在一个单独的查询中手动组装所有具有与我想从数据库中获取的位置相同的locationId属性的对象是不是更加简单? 我也考虑过将对象存储在位置文档的数组中(作为子文档),但是我决定要能够独立于位置(不查询位置)使用对象(创build,移除,更新),所以这种方法我猜不符合我的需求。 但是,在我的情况下,群体也有其缺点,所以我想这是最好的方式去手动收集由该位置的ID单独查询中的特定位置的对象。 我想听到这个技术的一些专业或高级用户对deviseMo​​ngoose模式的意见,以便我和其他人不会在后来保持和扩展我们的应用程序时遇到麻烦。 以下是我目前的模式: var locationSchema = new mongoose.Schema({ title: String, objects: [{ type: String, ref: 'object' }] }); var objectSchema = new mongoose.Schema({ title: String, location: { type: String, ref: 'location' } });

从不调用Mongodb插入callback

这个问题是这个问题的一个后续问题,我想问一个新的问题比发表评论和necropost更好。 (TL; DR,当插入一个集合时,他们给出一个解决scheme来获得_id) 我已经尝试了一个.js bash脚本或在控制台中似乎不工作: var latest; db.collec.insert({test:"yes"},function(err,newDoc){ latest = newDoc[0]._id; }); 该variables不会改变。 在控制台中,命令返回WriteResult({ "nInserted" : 1 })但是最新的仍然是空的,在js中它具有和以前相同的值。 有没有办法得到没有Node.js的id? 我应该切换到Node.js? 我的bash脚本真的只是mongo –eval '<my whole javascript>'

MongoDBsearch匹配string部分的多个字段

这对我的同事MongoDB和NodeJs Devs来说是一个挑战 我有一个search表单,用户可以在其中input以下内容: 225/65R16 71T K715 Hankook 至于我的mongodb,我有一个收集与以下文档: 1- { _id: SomeId, Description: 225/65R16 71T K715, Brand: Hankook, Ref: 123455 } 2- { _id: SomeId, Description: 225/65R16 71T K715, Brand: Continental, Ref: 123456 } 3- { _id: SomeId, Description: 225/65R16 94T Energy, Brand: Hankook, Ref: 123457 } 我怎么能这样做,以便在search下面的任何组合时,我得到了上面的文档1和3的结果? 组合列表: Hankook 225/65R16 225/65R16 Hankook 225 Hankook […]