【发布时间】:2015-02-02 17:55:02
【问题描述】:
我正在尝试运行以下命令,但没有得到预期的行为。
var searchQuery = {
'one' : oneQuery,
'two' : twoQuery,
'three' : threeQuery,
'four' : fourQuery
};
for(query in searchQuery){
var tags = ['text'];
tags.push(query);
SomeTable.update({ text : { $regex: searchQuery[query], $options: 'xi' }},
{$addToSet: {tags: tags}}, {multi: true});
SomeTable.find({ tags : tags })
.exec(function(err, rows) {
if (err) return console.error(err);
console.log('Size of result for ' + query + ': ' + rows.length);
for(var i=0; i < rows.length; i++) {
console.dir(rows[i].tags);
}
});
}
打印出来:
Size of result for one: 1
["text,one"]
Size of result for one: 2
["text,two"]
["text,two"]
Size of result for one: 0
Size of result for one: 0
对此我有两个问题。
-
以下查询返回空。
db.sometable.find(tags: 'text')
以下查询也不起作用:
db.sometable.find(tags: ["text,one"])
这也不起作用:
db.snippets.find({ tags: {$all : ["text,one"]}})
我希望在我的集合中标记数组并根据标记列表找到文档。
- 这里是否有使用闭包的范围。 (PS 我是 javascript 新手)
更新
这是我收藏的一份文件:
{ _id: 23xagb6bo97203947005da61d,
__v: 0,
tags: [ 'text,one' ],
value: '#text #one' }
更新 2
mongodb 是否支持将数组作为字段值传递?或者我的代码有问题。
【问题讨论】:
-
首先只使用 mongo shell 命令来缩小范围。请注意,mongo 将在没有特殊处理的数组中找到一个元素。 IE。查找({标签:“一个”})。如果你想找到一个完整的匹配然后使用 {$all : []} 你有。不确定“文本”是什么意思。预期的文件是什么
-
'text' 只是文档的另一个标签。我已经尝试了所有我在 mongo shell 和 nodejs 中都知道的组合。
-
你能打印一份记录/文件吗
-
如果数组名是文本则 .find({text: "one"})
-
我正在用我收藏的一份文档更新问题。数组名称是“标签”。 'tags' 数组包含一个元素 'text' 和其他元素。
标签: javascript arrays mongodb closures