1

我有以下查询,在第二个查询中,que.name 为空。

var que  = db.que.find({ _id: u.que_id }, {name:1})
db.documents.update(u, {$set: {que_name: que.name}})

我可以看到 que 的数据如下

 { "_id" : "general", "name" : "General" }

但没有 que.name 的数据。怎么了?

4

2 回答 2

2

find将光标返回到匹配的文档。所以que不是一个单一的文件 - 它是光标。光标没有字段name- 这就是您没有数据的原因que.name。光标指向您找到的文档(是的,可能有多个文档)。如果您将遍历光标,您将获得每个文档。只是为了显示什么是光标:

var que  = db.que.find({ _id: u.que_id }, { name: 1 }) // que is a cursor
que.forEach(function(d) { print(d.name); })

如果要获取文档,请使用findOne方法,该方法返回一个与您的搜索条件匹配的文档:

var que  = db.que.findOne({ _id: u.que_id }, { name: 1 }) // now que is document
que.name // prints name value
于 2013-08-20T14:09:16.883 回答
1

db.collection.find 返回一个游标。尝试使用 findOne()

var que = db.que.findOne( { _id: u.que_id }, {name:1})
于 2013-08-20T14:11:20.157 回答