查询字段为空或特定类型

时间:2016-12-13 04:06:59

标签: node.js mongodb mongodb-query

我正在尝试使用the $type operator编写查询以匹配可能具有[HtmlTargetElement("label", Attributes = "asp-for")] public class RequiredLabelTagHelper : LabelTagHelper { public RequiredLabelTagHelper(IHtmlGenerator generator) : base(generator) { } public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (For.Metadata.IsRequired) { CreateOrMergeAttribute("class", "required", output); } return base.ProcessAsync(context, output); } private void CreateOrMergeAttribute(string name, object content, TagHelperOutput output) { var currentAttribute = output.Attributes.FirstOrDefault(attribute => attribute.Name == name); if (currentAttribute == null) { var attribute = new TagHelperAttribute(name, content); output.Attributes.Add(attribute); } else { var newAttribute = new TagHelperAttribute( name, $"{currentAttribute.Value.ToString()} {content.ToString()}", currentAttribute.ValueStyle); output.Attributes.Remove(currentAttribute); output.Attributes.Add(newAttribute); } } } 'null'类型的字段。当我只查询一个特定类型时,它可以工作:

'objectid'

当我撰写的查询也与> db.collections.post.findOne({$or: [{x: {$type: 'null'}}]}).then(console.log) Promise { <pending> } > { _id: 584f573f931f2b0bf4e3d339, date: Mon Dec 12 2016 21:04:47 GMT-0500 (Eastern Standard Time), title: 'hgfgh', text: 'dhffgh', userId: 584f573a931f2b0bf4e3d338, x: null } x匹配时,我什么也得不回来:

objectid

我正在使用node-mongodb-native-2.2。

如果某个字段是> db.collections.post.findOne({$or: [{x: {$type: 'null'}}, {x: {$type: 'objectid'}}]}).then(console.log) Promise { <pending> } null,我该如何编写一个查询(我希望为验证程序编写此查询)?

1 个答案:

答案 0 :(得分:0)

我使用的方法显然是正确的,只是我将'objectId'(见“Available Types”)误导为'objectid'。正确拼写类型名称会导致mongodb决定将查询解释为查询而不是字段匹配。

我对发生在我身上的事情的理论是,mongodb放弃了试图强迫我的查询作为“查询”,而是将其视为对象密钥匹配。我不确定如何避免这种情况,或者如果有一种方法可以让mongodb在无法解释$type而不是静默地改变它解释查询的方式时引发错误。

编辑:啊,我也发现mongodb 试图告诉我我的语法很糟糕。我刚刚没有在.catch()上加Promise。糟糕...